我正在尝试在 Haskell 中使用 Maybe 类型。我查找了返回可能的键值元组。如何访问由 Maybe 包装的数据?例如,我想将 Maybe 包含的整数与另一个整数相加。
问问题
43886 次
6 回答
43
或者,您可以进行模式匹配:
case maybeValue of
Just value -> ...
Nothing -> ...
于 2010-09-04T18:09:16.407 回答
25
您可以使用Data.Maybe.fromMaybe
,如果它是 ,它需要一个Maybe a
和一个值来使用Nothing
。您可以使用 unsafe Data.Maybe.fromJust
,如果值为Nothing
. 您可能希望将内容保存在Maybe
. 如果你想在 a 中添加一个整数Maybe
,你可以做类似的事情
f x = (+x) <$> Just 4
这与
f x = fmap (+x) (Just 4)
f 3
然后将Just 7
。(您可以继续以这种方式链接其他计算。)
于 2010-09-04T16:58:27.527 回答
9
顺便说一句:既然Maybe
是 a Monad
,您可以使用do
-notation ...
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 回答