题
我正在尝试利用Haskell中的可能类型。我有一个查找钥匙,值元素可以返回也许。我如何访问可能包含的数据?例如,我想添加可能与另一个整数所包含的整数。
解决方案
或者,您可以模式匹配:
case maybeValue of
Just value -> ...
Nothing -> ...
其他提示
您可以使用 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
是一个 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
许多人反对使用 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
抱歉,我应该更好地谷歌搜索。
使用FromMaybe函数正是我所需的。 FromMaybe如果不是一无所有,将返回该值,否则它将返回提供给Maybe的默认值。
http://www.haskell.org/ghc/docs/6.12.2/html/libraries/base-4.2.0.1/data-maybe.html
不隶属于 StackOverflow