Haskell中的Int和Maybe Int之间有区别吗?

时间:2013-10-09 20:55:10

标签: haskell int

Haskell中的IntMaybe Int之间有区别吗?如果有,如何将Maybe Int转换为Int

2 个答案:

答案 0 :(得分:6)

是的,它们的类型不同:Maybe Int可以是NothingJust Int,其中Int始终是Int

可能在Data.Maybe中定义为

data Maybe a = Just a | Nothing
     deriving (Eq, Ord)
如果函数可能不返回有效值,则应使用

。查看函数isJustisNothingfromJust(使用Hoogle,Haskell API搜索引擎)。

在你的功能中你可以例如。

case maybeValue of
  Just x     -> ... -- use x as value
  Nothing    -> ... -- erroneous case

或者,使用fromMaybe(也来自Data.Maybe),其中包含默认值和Maybe 如果MaybeNothing,则返回默认值,否则返回实际值。

答案 1 :(得分:3)

Maybe数据类型表示一个可以为null的值,通常用作函数的返回值,该函数可以仅使用一个值成功,也可以在没有值的情况下失败。它有两个构造函数:NothingJust 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`