HaskellでMaybeタイプを利用しようとしています。多分を返すキー、値タプルのルックアップがあります。多分によってラップされたデータにアクセスするにはどうすればよいですか?たとえば、Maybeに含まれている整数を別の整数で追加したいとします。
6 に答える
または、パターンマッチングを行うこともできます。
case maybeValue of
Just value -> ...
Nothing -> ...
を使用できます。これは、である場合に使用するaと値をData.Maybe.fromMaybe
取ります。安全でないを使用することができます。これは、値が。の場合にクラッシュします。あなたはおそらく物事をに保ちたいでしょう。に整数を追加したい場合は、次のようにすることができますMaybe a
Nothing
Data.Maybe.fromJust
Nothing
Maybe
Maybe
f x = (+x) <$> Just 4
これはと同じです
f x = fmap (+x) (Just 4)
f 3
その後、になりますJust 7
。(この方法で、追加の計算をチェーンし続けることができます。)
補足として: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)
「たぶん」の例:
> maybe 0 (+ 42) Nothing
0
> maybe 0 (+ 42) (Just 12)
54
申し訳ありませんが、私はもっとググったはずです。
fromMaybe関数を使用することはまさに私が必要としていることです。fromMaybeは、それが何もない場合はMaybeの値を返し、そうでない場合はfromMaybeに提供されたデフォルト値を返します。
http://www.haskell.org/ghc/docs/6.12.2/html/libraries/base-4.2.0.1/Data-Maybe.html
多くの人が の使用に反対しています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