Получение произвольных функций в Haskell

При работе с полученными экземплярами в Haskell действительно ли возможно получить функции для произвольных типов, или мы ограничиваемся конкретными функциями?

9
задан Don Stewart 16 April 2011 в 19:58
поделиться

4 ответа

В haskell 98 можно получить экземпляры следующих классов: Eq, Ord, Enum, Ix, Bounded, Read и Show.

Используя расширения ghc, вы также можете создавать экземпляры следующих классов: Typeable, Data, Functor, Foldable и Traversable. Также существует расширение ghc, которое позволяет новому типу извлекать экземпляры из своего типа реализации.

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

9
ответ дан 4 December 2019 в 08:32
поделиться

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

6
ответ дан 4 December 2019 в 08:32
поделиться

Два других ответа верны. Но если вам нужно больше, есть несколько пакетов на взломе, которые могут справиться с большим. Мне очень нравится Data.Derive , поскольку вы можете сгенерировать исходный код напрямую (для совместимости) или подключить его к Template Haskell, чтобы сделать это во время компиляции. Уже поддерживается широкий спектр классов, и очень легко добавить поддержку для своих собственных. Резюме: рекламный ход чертовски хорошей библиотеки: -)

6
ответ дан 4 December 2019 в 08:32
поделиться

Чтобы добавить к ответу Дона: производная пользовательская функциональность для типов данных называется generic programming , и об этом много литературы. Препроцессоры и Шаблон Haskell не являются единственными решениями; см. один из обзорных документов, в которых приведен список литературы для других вариантов.

4
ответ дан 4 December 2019 в 08:32
поделиться
Другие вопросы по тегам:

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