Вопрос

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

Это было полезно?

Решение

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

Используя расширения ghc, вы также можете создавать экземпляры следующих классов:Типизируемые, данные, функторы, складные и проходимые.Существует также расширение ghc, которое позволяет новому типу получать экземпляры из типа реализации.

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

Другие советы

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

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

Чтобы добавить к ответу Дона:получение пользовательских функций для типов данных называется общее программирование и есть много литературы об этом.Препроцессоры и шаблон Haskell — не единственные решения;другие варианты см. в одном из обзорных документов со списком литературы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top