Описание тега scott-encoding
Кодирование Скотта - это способ представления (рекурсивных) типов данных в лямбда-исчислении.
2
ответа
Как вы представляете вложенные типы, используя кодировку Скотта?
ADT можно представить с помощью кодирования Скотта, заменив продукты кортежами, а суммы - сопоставителями. Например: data List a = Cons a (List a) | Nil Может быть закодирован с использованием кодировки Скотта как: cons = (λ h t c n . c h t) nil = (…
04 июн '15 в 23:04
1
ответ
Как использовать тип Reader, закодированный со стилем передачи продолжения
У меня сложилось впечатление, что каждое значение типа a может быть описан полиморфным типом ранга 2 newtype Id a = Id {runId :: forall r. (a -> r) -> r } в продолжении прохождения стиля. Таким образом, я получил следующий тип, чтобы определит…
08 фев '18 в 18:12
2
ответа
Почему явные квантификаторы общего набора необходимы для типов ранга n?
Когда я объявляю этот новый тип: newtype ListScott a = ListScott { unconsScott :: (a -> ListScott a -> r) -> r -> r } который определил бы гипотетический тип ранга 2 ListScott :: ((a -> ListScott a -> r) -> r -> r) -> List…
12 янв '18 в 11:40
1
ответ
Как реализовать новый тип Haskell, используя кодировку функции?
Внимание: это вопрос на разных языках. Я продемонстрирую проблему, реализовав список различий. Вот закодированный Скотт List, который обеспечивает базовый тип. Я использую его с валидатором динамического типа, поэтому мне нужна оболочка для связыван…
24 июн '21 в 17:30
2
ответа
Как определить тип конструктора списка, закодированного Скоттом?
Списки, закодированные по Скотту, можно определить следующим образом: newtype List a = List { uncons :: forall r. r -> (a -> List a -> r) -> r } В отличие от версии ADT, это и тип, и конструктор данных. Кодировка Скотта определяет АТД по…
07 фев '21 в 22:15