这是"第一原理的Haskell编程"一书中的一个问题.
我正在阅读上面提到的书,第5章,练习2:参数化.
复制了这本书.
通过查看 - > a - > a,我们可以更加舒适地了解参数.这个假设函数a - > a - > a有两个且只有两个实现.
我不明白"只有两个实现"部分?可以任何人向我解释为什么只有2个实现?
dop*_*ane 13
我认为"实施"这个词乍一看可能有点令人困惑.
假设我们只有函数类型f :: a -> a -> a,没有其他信息; 我们不允许偷看内心f.该函数必须返回一个a,您只有2个可能a的输入.因此该功能必须返回第一个a 或第二个a; 只有2个可能的功能.
你不能拥有,f x y = x + y因为你不知道如何给+两个a人f :: a -> a -> a.如果你有,h :: Int -> Int -> Int那么,那h x y = x + y将是一个有效的功能,但你没有得到这些信息f.
同样,如果您拥有f :: a -> a -> a并且您声称f x y = x + y 有效,该怎么办?然后,我可以通过传递了两个破你的要求Fruits到f:f Apple Orange = ???.好Apple + Orange暧昧,代码不会工作.因此,保持类型多态"将可能的函数"限制为2个可能的"实现":f x y = x或f x y = y.
这段视频让我明白了.我推荐整个视频,但链接是相关部分.(31:28)
它展示了类型级推理和参数化的强大功能.这种推理的所有信息都在类型中.
另一个例子,说你所拥有的只是一个函数类型g :: b -> b.好吧,函数必须返回一个b,唯一的参数是a,b所以必须返回它 b.因此,只有一种这样的函数具有类型b -> b.