Может ли кто-нибудь объяснить, почему существуют 27 разные значения Bool->Bool, из которых 11 может быть определено в Haskell?
27 различных значений Bool to Bool в Haskell
Ответ 1
Существует три значения типа Bool: True, False и bottom (выражения, для которых оценка не заканчивается, или выражения, для которых оценка превращается в ошибки).
Тогда существует экспоненциальное число функций от A до B. Более точно |B| ^ |A|.
Таким образом, существуют 3^3 = 27 функции типа Bool -> Bool.
Теперь, для второй части вопроса: функция, начинающаяся снизу, может быть только 2: постоянная, возвращающая True и постоянная возвращающая False. Затем вам нужно добавить число функций от {True, False} до {True, False, bottom}, которое равно 3^2. Итак, у вас будут функции 9+2=11.
Изменить. Вот 11 возможных функций:

B - нижний, T - True, F - False. Последняя строка представляет функции const True и const False, тогда как первые три строки представляют функции, проверяющие значение аргумента. Вот почему первые три строки отображают от B до B: проверка значения дна не может привести к чему-то еще, кроме нижнего.
Надеюсь, теперь это станет понятным.