可以用于可选参数吗?

时间:2015-11-02 17:06:51

标签: haskell monads maybe

我无法让以下人员在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所有部分的新功能。谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

elseZero的类型为(Num a) => Maybe a -> a,因此GHCi会尝试show你。但是,函数不是show,这是错误消息告诉您的。

您的基本误解似乎是您认为elseZeroelseZero Nothing是相同的。但前者是类型为(Num a) => Maybe a -> a的函数,它返回Just - 值或0,后者为(Num a) => a类型的0。