41

HaskellでMaybeタイプを利用しようとしています。多分を返すキー、値タプルのルックアップがあります。多分によってラップされたデータにアクセスするにはどうすればよいですか?たとえば、Maybeに含まれている整数を別の整数で追加したいとします。

4

6 に答える 6

43

または、パターンマッチングを行うこともできます。

case maybeValue of
  Just value -> ...
  Nothing    -> ...
于 2010-09-04T18:09:16.407 に答える
25

を使用できます。これは、である場合に使用するaと値をData.Maybe.fromMaybe取ります。安全でないを使用することができます。これは、値が。の場合にクラッシュします。あなたはおそらく物事をに保ちたいでしょう。に整数を追加したい場合は、次のようにすることができますMaybe aNothingData.Maybe.fromJustNothingMaybeMaybe

f x = (+x) <$> Just 4

これはと同じです

f x = fmap (+x) (Just 4)

f 3その後、になりますJust 7。(この方法で、追加の計算をチェーンし続けることができます。)

于 2010-09-04T16:58:27.527 に答える
9

補足として:Maybeは であるため、 -notation ...Monadを使用して計算を構築できます。do

sumOfThree :: Maybe Int
sumOfThree = do
  a <- someMaybeNumber
  b <- someMaybeNumber
  c <- someMaybeNumber
  let k = 42 -- Just for fun
  return (a + b + c + k)
于 2010-09-04T18:21:18.163 に答える
8

「たぶん」の例:

> maybe 0 (+ 42) Nothing
0
> maybe 0 (+ 42) (Just 12)
54
于 2010-09-06T09:25:31.550 に答える
4

申し訳ありませんが、私はもっとググったはずです。

fromMaybe関数を使用することはまさに私が必要としていることです。fromMaybeは、それが何もない場合はMaybeの値を返し、そうでない場合はfromMaybeに提供されたデフォルト値を返します。

http://www.haskell.org/ghc/docs/6.12.2/html/libraries/base-4.2.0.1/Data-Maybe.html

于 2010-09-04T16:57:07.530 に答える
4

多くの人が の使用に反対していますfromJustが、ルックアップが失敗した場合 (エラー!!) に何が起こるかを知っていると便利です。

まず、これが必要になります:

import Data.Maybe

そして、タプルのリストからのルックアップは次のようになります

Data.Maybe.fromJust $ lookup key listOfTuples

たとえば、ルックアップが成功した場合:

Data.Maybe.fromJust $ lookup "a" [("a",1),("b",2),("c",3)]
1

そして、恐ろしい失敗は次のようになります。

Data.Maybe.fromJust $ lookup "z" [("a",1),("b",2),("c",3)]
*** Exception: Maybe.fromJust: Nothing
于 2013-09-24T10:14:06.590 に答える