我正在尝试在Haskell中使用Maybe类型。我查找了返回Maybe的关键值数组。如何访问由Maybe包装的数据?例如,我想将Maybe包含的整数与另一个整数相加。在Haskell中使用Maybe类型
回答
对不起,我应该GOOGLE更好。
使用fromMaybe函数正是我所需要的。 fromMaybe将返回Maybe中的值,如果它不是什么也不返回,否则它将返回提供给fromMaybe的默认值。
http://www.haskell.org/ghc/docs/6.12.2/html/libraries/base-4.2.0.1/Data-Maybe.html
是的,但要确保这是你想要的行为,因为如果你打算,例如,使用一个Maybe Int,然后每当它没有时你返回零,那么你应该有从一开始就使用了一个普通的旧Int。也许是应该帮助编码没有结果或价值,而不是真的应该被解决。我个人尽量避开fromMaybe函数。 – 2010-09-11 03:44:25
你可以使用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
。 (您可以继续链附加的计算以这种方式)。
正如一个侧面说明...
为 “可能”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
- 1. 在Haskell中使用Maybe编写Maximum Monoid
- 2. Haskell Int和Maybe Int
- 3. 在Haskell中将Maybe Int转换为Int
- 4. 在Haskell的类型级编程中使用类型不等式
- 5. 类型类Haskell中的数据类型
- 6. 在Haskell中定义为Maybe的列表?为什么不?
- 7. 如何在D中实现Haskell * Maybe *构造?
- 8. 在Haskell中将函数更改为Maybe函数
- 9. 在Haskell中生成Haskell类型的设备(“second order Haskell”)?
- 10. Haskell:从类型
- 11. Haskell类型类应该如何使用类型?
- 12. 不同类型的在Haskell
- 13. Haskell中的类型比较
- 14. haskell中的代数类型
- 15. Haskell中的常量类型(++)
- 16. 如何在表达式的中途使用Haskell类型签名?
- 17. 在Haskell中使用整数参数化类型
- 18. 使用推断类型的Haskell类型错误
- 19. Haskell函数类型
- 20. Haskell类型错误
- 21. Haskell定义类型
- 22. Haskell类型错误
- 23. Haskell刚性类型?
- 24. Haskell中的存在类型错误
- 25. 在Haskell中返回特定类型
- 26. 在OO中指定数据类型Haskell
- 27. 在Haskell中展开函数类型
- 28. Haskell的类型类与参数类型
- 29. 使用ReaderT Maybe或MaybeT Reader?
- 30. Haskell的类型类隐含
这是一个重复:http://stackoverflow.com/questions/3375483/operating-on-a-return-from-a-maybe-that -contains-just/3375712#3375712 – 2010-09-04 19:16:49