Описание тега scott-encoding

Кодирование Скотта - это способ представления (рекурсивных) типов данных в лямбда-исчислении.
2 ответа

Как вы представляете вложенные типы, используя кодировку Скотта?

ADT можно представить с помощью кодирования Скотта, заменив продукты кортежами, а суммы - сопоставителями. Например: data List a = Cons a (List a) | Nil Может быть закодирован с использованием кодировки Скотта как: cons = (λ h t c n . c h t) nil = (…
1 ответ

Как использовать тип Reader, закодированный со стилем передачи продолжения

У меня сложилось впечатление, что каждое значение типа a может быть описан полиморфным типом ранга 2 newtype Id a = Id {runId :: forall r. (a -> r) -> r } в продолжении прохождения стиля. Таким образом, я получил следующий тип, чтобы определит…
2 ответа

Почему явные квантификаторы общего набора необходимы для типов ранга n?

Когда я объявляю этот новый тип: newtype ListScott a = ListScott { unconsScott :: (a -> ListScott a -> r) -> r -> r } который определил бы гипотетический тип ранга 2 ListScott :: ((a -> ListScott a -> r) -> r -> r) -> List…
1 ответ

Как реализовать новый тип Haskell, используя кодировку функции?

Внимание: это вопрос на разных языках. Я продемонстрирую проблему, реализовав список различий. Вот закодированный Скотт List, который обеспечивает базовый тип. Я использую его с валидатором динамического типа, поэтому мне нужна оболочка для связыван…
2 ответа

Как определить тип конструктора списка, закодированного Скоттом?

Списки, закодированные по Скотту, можно определить следующим образом: newtype List a = List { uncons :: forall r. r -> (a -> List a -> r) -> r } В отличие от версии ADT, это и тип, и конструктор данных. Кодировка Скотта определяет АТД по…