计算代数数据类型

Mar*_*las 7 theory haskell algebraic-data-types

我正在阅读/听取Chris Taylor关于代数数据类型的演讲.

http://chris-taylor.github.io/blog/2013/02/10/the-algebra-of-algebraic-data-types/

还有一个关于函数类型的部分.特别是这个例子

data Bool = True | False
data Trio = First | Second | Third
Run Code Online (Sandbox Code Playgroud)

鉴于法律

a -> b == B^A
Run Code Online (Sandbox Code Playgroud)

特定

Trio -> Bool     should equal     8
Run Code Online (Sandbox Code Playgroud)

通过乘法为什么8而不是6?

如果我正确理解这一点,那么具体的组合应该是

First  -> True
First  -> False
Second -> True
Second -> False
Third  -> True
Third  -> False
Run Code Online (Sandbox Code Playgroud)

这不仅仅是6个具体的实现Trio -> Bool吗?

我错过了什么?

Dav*_*vid 18

那些不是完整的实现.对于完整的实现,它类似于从二进制计数从0到7(总共8 = 2 3个数字),每个实现的每一行代表三个位中的一个.所有可能性都是这样(如果我们调用我们的函数f):

1)

f First  = False
f Second = False
f Third  = False
Run Code Online (Sandbox Code Playgroud)

2)

f First  = True
f Second = False
f Third  = False
Run Code Online (Sandbox Code Playgroud)

3)

f First  = False
f Second = True
f Third  = False
Run Code Online (Sandbox Code Playgroud)

4)

f First  = True
f Second = True
f Third  = False
Run Code Online (Sandbox Code Playgroud)

5)

f First  = False
f Second = False
f Third  = True
Run Code Online (Sandbox Code Playgroud)

6)

f First  = True
f Second = False
f Third  = True
Run Code Online (Sandbox Code Playgroud)

7)

f First  = False
f Second = True
f Third  = True
Run Code Online (Sandbox Code Playgroud)

8)

f First  = True
f Second = True
f Third  = True
Run Code Online (Sandbox Code Playgroud)