Haskell中的anInt
和a有区别吗?Maybe Int
如果有,我如何将 a 转换为Maybe Int
a Int
?
问问题
1627 次
2 回答
6
是的,它们有不同的类型:Maybe Int
可能是Nothing
或Just Int
,Int
总是在哪里Int
。
也许定义Data.Maybe
为
data Maybe a = Just a | Nothing
deriving (Eq, Ord)
如果函数可能无法返回有效值,则应使用。查看函数isJust
、isNothing
和fromJust
(使用Hoogle,Haskell API 搜索引擎)。
在您的功能内,您可以例如
case maybeValue of
Just x -> ... -- use x as value
Nothing -> ... -- erroneous case
或者,使用fromMaybe
(也来自Data.Maybe
),它采用默认值和 a并在 a为 aMaybe
时返回默认值,否则返回实际值。Maybe
Nothing
于 2013-10-09T20:57:08.207 回答
3
数据类型表示一个可以为 null的Maybe
值,通常用作函数的返回值,该函数可以只用一个值成功,也可以不带值失败。它有两个构造函数:Nothing
并且Just a
,a
你返回的值在哪里。你可以像这样使用它:
safeHead :: [a] -> Maybe a
safeHead [] = Nothing
safeHead (x:xs) = Just x
您可以使用模式匹配或使用Data.Maybe
. 我通常更喜欢前者,所以类似:
main = do
let xs :: [Int]
xs = someComputation 1 2 3
xHead = safeHead xs
case xHead of
Nothing -> putStrLn "someComputation returned an empty list!"
Just h -> putStrLn $ "The first value is " ++ show h
-- Here `h` in an `Int`, `xHead` is a `Maybe Int`
于 2013-10-09T21:02:36.620 回答