关于Haskell的参数化概念

时间:2019-01-31 02:24:09

标签: haskell

这是《第一原理的Haskell编程》一书中的一个问题。

我正在阅读上面提到的书,关于练习2,第5章,参数化。

从书中复制。

我们可以更舒适地了解参数 通过查看-> a-> a。这个假设 函数a-> a-> a具有两个并且只有两个实现。

我不理解“仅两个实现”部分?谁能向我解释为什么只有两个实现?

1 个答案:

答案 0 :(得分: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 有效,该怎么办。然后,我可以通过向Fruit传递两个ff Apple Orange = ???来打破您的要求。 Apple + Orange不明确,代码无法正常工作。因此,保持类型多态类型将可能的功能“限制”为2个可能的“实现”:f x y = xf x y = y

这个video帮助我理解了。我会推荐整个视频,但链接是指向相关部分的。 (31:28)

它演示了类型级推理和参数化的强大功能。此类推理的所有信息都在类型中。

另一个例子,假设您所拥有的只是函数类型g :: b -> b。好的,该函数必须返回一个b,并且唯一的参数是一个b,因此它必须返回 that b。因此,只有一个类型为b -> b的函数。