Что такое использование полиморфных видов?

Полиморфные виды являются расширением системы типов Haskell, поддерживаемой UHC, позволяя

data A x y = A (y x)

быть введенным (kinded?) как a -> (a -> *) -> *. Для чего они полезны?

17
задан sdcvvc 17 June 2010 в 14:47
поделиться

3 ответа

Одним из возможных примеров использования может быть использование Conal TypeCompose для создания преобразователей монад в бесточечном стиле.

type MyT = StateT Foo :. MaybeT :. ContT Bar

(просто в качестве примера, я понятия не имею, что делать с этими foos и bars ..)

Вместо:

type MyT m = StateT Foo (MaybeT (ContT Bar m))

(это будет иметь тот же результат, кроме newtype -wrappers)

В настоящее время вам нужно дублировать код комбинаторов для разных типов, и это расширение отменяет повторение и позволяет использовать один фрагмент кода для управления ими всеми.

11
ответ дан 30 November 2019 в 13:27
поделиться

Конечно, они полезны для определения функций, которые работают над конструкторами данных с произвольной аритмией!

Конкретным примером может быть функция, которая, учитывая конструктор данных с произвольной чёткостью, возвращает новый конструктор данных, который оборачивает данный конструктор в Some().

1
ответ дан 30 November 2019 в 13:27
поделиться

Добавление полиморфных видов к GHC

Фоном для этого вопроса может быть мотивация в целом для более выразительной системы типов .

То есть, общая причина добавления полиморфных видов в Haskell заключается в том, чтобы улучшить опыт программирования на уровне типов . В настоящее время программирование на уровне типов в Haskell осуществляется на практически нетипизированном уровне " kind ". Более богатый добрый язык упростит программирование на уровне типов в Haskell в целом.

Более конкретным примером может быть удаление (динамического) ограничения Typeable из универсальных шаблонов стиля SYB ( цитата ), а также улучшение общей поддержки универсального программирования более высокого порядка.

11
ответ дан 30 November 2019 в 13:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: