我正在尝试在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类型?
- 2. 在Haskell中使用Maybe编写Maximum Monoid
- 3. Haskell String to Maybe List
- 4. Haskell Int和Maybe Int
- 5. 获取Haskell中Maybe的值
- 6. 在Haskell中将Maybe Int转换为Int
- 7. 如何将'Real World Haskell'列表数据类型转换为使用Maybe?
- 8. 在Haskell中使用数据类型
- 9. 类型在Haskell
- 10. 在Haskell的类型级编程中使用类型不等式
- 11. 使用高阶的Haskell类型在C#
- 12. 在Haskell的数据类型使用Data.Array
- 13. Haskell类型类
- 14. 使用foldr的Haskell类型类
- 15. Haskell:有条件地使用Maybe FilePath执行外部进程
- 16. 类型类Haskell中的数据类型
- 17. 在函数中检查Haskell类型类
- 18. 类型类在Haskell中如何工作?
- 19. 如何在D中实现Haskell * Maybe *构造?
- 20. 在Haskell中将函数更改为Maybe函数
- 21. 在Haskell中定义为Maybe的列表?为什么不?
- 22. Haskell中的Int和Maybe Int存在区别吗?
- 23. 在Haskell中生成Haskell类型的设备(“second order Haskell”)?
- 24. Haskell:从类型
- 25. Haskell TypeCast类型
- 26. Haskell类型类应该如何使用类型?
- 27. Haskell中的函数类型
- 28. Haskell中的类型比较
- 29. Haskell中的类型转换
- 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