Подтвердить что ты не робот

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

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

data A x y = A (y x)

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

4b9b3361

Ответ 1

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

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

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

Вместо:

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

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

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

Ответ 2

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

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

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

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

Ответ 3

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

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