我想将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'的方程式具有不同数量的参数”
我不太了解发生了什么
答案 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)