我无法让以下人员在GHCi工作。这是一个简短的例子,可以在网上弹出几个地方。
import Data.Maybe
elseZero :: (Num a) => Maybe a -> a
elseZero n = fromMaybe 0 n
我的理解是,当我将其加载到GHCi中然后使用elseZero
运行时,它应该返回0,因为没有给出参数。
但我收到错误:
Non type-variable argument in the constraint: Num (Maybe a)
(Use FlexibleContexts to permit this)
When checking that `it' has the inferred type
it :: forall a. (Num a, Num (Maybe a)) => a
Haskell Monadic所有部分的新功能。谢谢你的帮助!
答案 0 :(得分:1)
elseZero
的类型为(Num a) => Maybe a -> a
,因此GHCi会尝试show
你。但是,函数不是show
,这是错误消息告诉您的。
您的基本误解似乎是您认为elseZero
和elseZero Nothing
是相同的。但前者是类型为(Num a) => Maybe a -> a
的函数,它返回Just
- 值或0,后者为(Num a) => a
类型的0。