Haskell中的Int
和Maybe Int
之间有区别吗?如果有,如何将Maybe Int
转换为Int
?
答案 0 :(得分: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
),其中包含默认值和Maybe
如果Maybe
是Nothing
,则返回默认值,否则返回实际值。
答案 1 :(得分:3)
Maybe
数据类型表示一个可以为null的值,通常用作函数的返回值,该函数可以仅使用一个值成功,也可以在没有值的情况下失败。它有两个构造函数: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`