为什么有| b | ^ | a |函数a-> b中的居民是怎么回事?为什么它不只是一个“居民”

时间:2019-01-05 22:49:44

标签: haskell

为什么有| b | ^ | a |函数a-> b中的居民 我认为它应该是“ a”类居民,因为a是任何类型。无法理解为什么不是这样。

1 个答案:

答案 0 :(得分:6)

让我们谈一个具体的例子,即下面两种特定类型的函数:

data Three = A | B | C
data Four = OneFish | TwoFish | RedFish | BlueFish

可以通过为每个输入Three -> FourFour和{选择四个A类型的可能值之一来完全指定B类型的函数{1}};这是一个例子:

C

这是另一个例子;就像f A = TwoFish f B = BlueFish f C = OneFish 一样,只是它为f做出了不同的选择:

C

由于g A = TwoFish g B = BlueFish g C = BlueFish 的输出有四种选择,A的输出有四种选择,B的输出有四种选择,因此有4 * 4 * 4 = 64种可能功能选择。

现在,我们可以概括一下,并讨论其他有限输入类型上的总函数。和以前一样,可以通过告诉它为每个输入C选择哪个a来完全指定从bb的函数。在以前每个输入有4个可能的输出的地方,现在每个选择都有a个可能性。和以前一样,由于选择是完全独立的,因此对于每个可能的输入,我们必须将|b|自身乘以一次-即|b|-很多次。也就是说,我们有|a|个可能的完整规格。