【发布时间】:2011-07-16 08:43:14
【问题描述】:
我已经开始尝试使用 Haskell,但遇到了问题。 qqq 是一个函数,如果用“Nothing”调用应该打印一个字符串,如果用“Just something”调用应该打印其他东西。
第一次尝试似乎成功了:
qqq Nothing = print "There isn't anything to be printed."
qqq (Just x) = print "There is something to be printed." >> print x
main :: IO ()
main = qqq (Just 43)
但是:
- 当我尝试创建
main = qqq (Nothing)时失败(“约束中的歧义类型变量 `a0':(显示 a0)由使用 'qqq' 引起”) - 如果失败,我想添加类型签名:
-
qqq :: Maybe x => x -> IO ()->Type constructor 'Maybe' used as a class-> 但不是吗?
-
-
qqq :: (Maybe x) -> IO ()。现在签名本身看起来成功了。但是main = qqq (Just 43)开始失败,出现神秘的(Show a0)错误,就像在main = qqq (Nothing)案例中一样。
-
问题:
- 为什么用
Nothing调用qqq和用Just 43调用有很大不同? - 什么是
(Show a0)?它仅在错误消息中提及。任何使用它的尝试都会导致类似“显示不在范围内”的结果。 - 什么是正确的类型签名?如何制作它推导出的 Haskell 打印类型签名?期待类似的东西:
f 0 = 2
f x = (f (x-1)) + 3
main = print get_type_as_string(f)
-- prints "Number -> Number"
【问题讨论】:
标签: haskell nothing maybe type-signature