我正在尝试在Haskell中使用Maybe类型。我查找了返回Maybe的键值元组。如何访问由Maybe包装的数据?例如,我想将Maybe包含的整数与另一个整数相加。
答案 0 :(得分:36)
或者你可以模式匹配:
case maybeValue of
Just value -> ...
Nothing -> ...
答案 1 :(得分:19)
您可以使用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
。 (您可以继续以这种方式链接其他计算。)
答案 2 :(得分:8)
正如旁注:由于Maybe
是Monad
,您可以使用do
构建计算 - 符号...
sumOfThree :: Maybe Int
sumOfThree = do
a <- someMaybeNumber
b <- someMaybeNumber
c <- someMaybeNumber
let k = 42 -- Just for fun
return (a + b + c + k)
答案 3 :(得分:8)
“可能”的例子:
> maybe 0 (+ 42) Nothing
0
> maybe 0 (+ 42) (Just 12)
54
答案 4 :(得分: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
答案 5 :(得分:3)
对不起,我应该用Google搜索更好。
使用fromMaybe函数正是我所需要的。 fromMaybe将返回Maybe中的值,如果它不是什么,否则它将返回提供给fromMaybe的默认值。
http://www.haskell.org/ghc/docs/6.12.2/html/libraries/base-4.2.0.1/Data-Maybe.html