Каковы виды использования полиморфных видов? - PullRequest
17 голосов
/ 17 июня 2010

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

data A x y = A (y x)

(kinded?) Как a -> (a -> *) -> *.Для чего они нужны?

Ответы [ 3 ]

11 голосов
/ 17 июня 2010

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

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

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

Вместо:

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

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

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

11 голосов
/ 28 июня 2010

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

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

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

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

1 голос
/ 17 июня 2010

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

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

...