如何将Maybe a转换为a或-1(一无所有)?

时间:2019-02-19 19:14:47

标签: haskell maybe

我想将Just a转换为a,将Nothing转换为-1,其中a是Int。

我的功能是:

--Converts Just a to a && Nothing to -1
justToIntOnly :: (Integral a) => Maybe a -> a
justToIntOnly Just a = a
justToIntOnly Nothing = -1

我得到的错误是: “'justToIntOnly'的方程式具有不同数量的参数”

我不太了解发生了什么

1 个答案:

答案 0 :(得分:5)

您只是忘记了括号,记住您在做什么实际上是一个模式匹配:

--Converts Just a to a && Nothing to -1
justToIntOnly :: (Integral a) => Maybe a -> a
justToIntOnly (Just a) = a
justToIntOnly Nothing  = -1

正如评论中指出的那样,已经有可以根据需要处理Maybe的函数,您可以在Hoogle中搜索Maybe a -> a

maybe函数采用默认值,函数和Maybe值。如果Maybe值为Nothing,则该函数返回默认值。否则,它将函数应用于Just内的值并返回结果。

maybe :: b -> (a -> b) -> Maybe a -> b

您可以像使用它

justToIntOnly = maybe (-1) id

一个更好的功能是fromMaybe :: a -> Maybe a -> a,它采用默认值和Maybe值。如果Maybe为Nothing,则返回默认值;否则,返回默认值。否则,它将返回Maybe中包含的值。

justToIntOnly = fromMaybe (-1)