4

Haskell中的anInt和a有区别吗?Maybe Int如果有,我如何将 a 转换为Maybe Inta Int

4

2 回答 2

6

是的,它们有不同的类型:Maybe Int可能是NothingJust IntInt总是在哪里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),它采用默认值和 a并在 a为 aMaybe 时返回默认值,否则返回实际值。MaybeNothing

于 2013-10-09T20:57:08.207 回答
3

数据类型表示一个可以为 null的Maybe值,通常用作函数的返回值,该函数可以只用一个值成功,也可以不带值失败。它有两个构造函数:Nothing并且Just aa你返回的值在哪里。你可以像这样使用它:

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 回答