Вопрос по haskell – Какие расширения Haskell (GHC) следует использовать / избегать пользователям?

60

У меня уже был опыт, когда GHC говорил мне использовать расширение, только чтобы обнаружить, что при использовании этого расширения я сделал код намного более сложным, когда простой рефакторинг позволил бы мне придерживаться Haskell 98 (сейчас2010) и иметь более простое решение.

С другой стороны, бывают также случаи, когда GADT или Rank2Types (редко RankNTypes) делают для гораздо меньшей работы и намного более чистый код.

Какие расширения обычно скрывают возможность улучшения дизайна, а какие вообще улучшают его? Если есть некоторые, которые делают оба, что пользователь должен искать (быть уверенным, верно ли это или нет в отношении решения, которое он намеревается), прежде чем принять решение об использовании этого расширения?

(Смотрите такжеДолжен ли я использовать расширения GHC Haskell или нет?)

Этот вопрос похож:stackoverflow.com/questions/10830757/… huon
Похожи, но разные. Пока этот вопрос касается «безопасности» В отношении расширений проблема Джона заключается в преимуществах разработки кода с расширениями и без них. Riccardo T.
Дон Стюарт: Да, я согласен. Оглядываясь назад, я бы хотел сфокусировать вопрос и те расширения, которые влияют на проверку типов. Спасибо за ваш ответ, тем не менее. John F. Miller
Стивен Дил сделал список расширений, сказав, являются ли они доброкачественными или нет:dev.stephendiehl.com/hask/#language-extensions Janus Troelsen
Это действительно сложная задача: некоторые расширения носят очень общий характер и делают возможными новые виды программирования, некоторые имеют высокую цель и направлены на решение конкретной, невыполнимой задачи. Don Stewart

Ваш Ответ

1   ответ
53

стетическое суждение!

The Good

GADTs Parallel list comprehensions Pattern guards Monad comprehensions Tuple sections Record wild cards Empty data decls Existential types Generalized new type deriving MPTCs + FDs Type families Explicit quantification Higher rank polymorphism Lexically scoped tyvars Bang Patterns

The Bad

SQL comprehensions Implicit parameters

The Ugly (но необходимо)

Template Haskell Unboxed types and tuples Undecidable, overlapping and incoherent instances -- usually means you have a misdesign.

Not sure

Arrow notation View patterns
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededIncoherentInstancesError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded

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