我正在尝试利用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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top