В книге Thinkingwithtypes.com/" rel="noreferrer">Thinking with Types 6.4 Continuation Monad
говорится, что типы a
и forall r. (a -> r) -> r
изоморфны, что подтверждается следующими функциями :
cont :: a -> (forall r. (a -> r) -> r)
cont x = \f -> f x
unCont :: (forall r. (a -> r) -> r) -> a
unCont f = f id
В этой книге говорится, что любые два типа, имеющие одинаковую мощность, всегда будут изоморфны друг другу. Поэтому я пытаюсь выяснить мощность типов a
и forall r. (a -> r) -> r
.
Предположим, что мощность типа a
равна |a|
. Тогда как для типа forall r. (a -> r) -> r
определить, что его кардинальность равна |a|
? Тип функции a -> b
имеет мощность |b|^|a|
, т. е. |b|
в степени |a|
, поэтому forall r. (a -> r) -> r
имеет мощность |r|^(|r|^|a|)
. Как он может быть равен |a|
?
Я смущен. Спасибо за любые советы!
forall r.
a
явно не изоморфен(a -> r) -> r
для любого конкретногоr
, но это не то, что используютcont
иunCont
. - person Robin Zigmond   schedule 15.02.2020t
и типforall x. t
не обязательно имеют одинаковую кардинальность. Итак, вы рассчитали правильную кардинальность для(a -> r) -> r
, но не дляforall r. (a -> r) -> r
. - person Daniel Wagner   schedule 15.02.2020