在Haskell中使用Maybe类型

时间:2010-09-04 16:52:47

标签: haskell maybe

我正在尝试在Haskell中使用Maybe类型。我查找了返回Maybe的键值元组。如何访问由Maybe包装的数据?例如,我想将Maybe包含的整数与另一个整数相加。

6 个答案:

答案 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)

正如旁注:由于MaybeMonad,您可以使用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