2014-05-28 3 views
5

Я читаю/слушаю презентацию Криса Тейлора по алгебраическим типам данных.Подсчет алгебраических типов данных

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

И есть раздел о типах функций. В частности, пример

data Bool = True | False 
data Trio = First | Second | Third 

Учитывая закон

a -> b == B^A 

Учитывая

Trio -> Bool  should equal  8 

Почему 8, а не 6 с помощью умножения?

Если я правильно понять это, конкретные комбинации должны быть

First -> True 
First -> False 
Second -> True 
Second -> False 
Third -> True 
Third -> False 

не то, что только 6 конкретные реализации Trio -> Bool?

Что мне не хватает?

ответ

16

Это не полные реализации. Для полных реализаций это похоже на подсчет от 0 до 7 (что составляет в общей сложности 8 = 2 номеров) в двоичном формате, причем каждая строка каждой реализации представляет один из трех битов. Все возможности выглядеть следующим образом (если мы называем нашу функцию f):

1)

f First = False 
f Second = False 
f Third = False 

2)

f First = True 
f Second = False 
f Third = False 

3)

f First = False 
f Second = True 
f Third = False 

4)

f First = True 
f Second = True 
f Third = False 

5)

f First = False 
f Second = False 
f Third = True 

6)

f First = True 
f Second = False 
f Third = True 

7)

f First = False 
f Second = True 
f Third = True 

8)

f First = True 
f Second = True 
f Third = True 

 Смежные вопросы

  • Нет связанных вопросов^_^