【发布时间】:2016-09-25 00:26:53
【问题描述】:
Haskell 中是否有类型为a -> b 的函数?这意味着,是否可以编写一个函数,例如f :: a -> b?我认为不存在这样的函数,原因如下:假设我们在f :: a -> b 的位置找到了f,那么f 2 会产生什么? b 类型的值,但是 b 是什么,因为 Haskell 无法从我给出的参数中推断(我认为)它?它是否正确?否则,你能给我一个这样的功能的例子吗?
【问题讨论】:
-
你说得对,很难写出这种类型的有趣函数;但您给出的reason 不正确。当然允许编写在以某些方式应用时导致类型不明确的函数。
-
任何在解释为逻辑公式时不是重言式的类型都是偏函数的类型,它必须永远抛出错误或循环,至少对于某些输入。
forall a b. a -> b不是重言式,因为你可以很容易地想到反例:例如Int -> Void——仅仅因为你给了我一个Int,并不意味着我可以给你一个Void!head :: [a] -> a也是如此。你可以通过查看类型来判断,如果你给它一个空列表[],它就不能返回结果。
标签: haskell types type-inference unification