Часто говорит, чтоЦерковь кодирование булева и STLC
tru t f = t
fls t f = f
представляет ложным и истинным в том смысле, что «мы можем использовать эти условия для выполнения операции по проверке истинности логического значения».
Но это скрывает важное предостережение, поскольку оно кажется верным только в нетипизированном исчислении лямбда. Если я просто подключить эти значения в Haskell, я могу написать функцию:
tryMeOnFalse ∷ (∀ t f. t → f → t) → String
tryMeOnFalse tr = "Hi"
a' = tryMeOnFalse tru
b' = tryMeOnFalse fls -- type error !
, отличающее Tru и FLS на уровне типа. Как неправильно/справедливо было бы сказать, что:
- в STLC
tru
иfls
являются значение свидетелей уровня некоторых способствовало'Boolean
рода, который имеет Типы'True
и'False
- в STLC (принуждать) набрал значения и
(fls :: ∀ t . t → t → t)
представляют ложные и истинные (и в нетипизированным, ну обычный)
Edit: Я теперь понимаю, благодаря ответу @Daniel Вагнера я думал второго порядка лямбда-исчисление и не STLC в моей questi на.
Я сбивал с толку STLC со вторым порядковым номером заказа. когда вы определяете 'type Boolean = forall r. r -> r -> r', вы используете его. – nicolas
Типичным названием «исчисление второго порядка» является система F, fyi –