61 votes

Quelles extensions Haskell (GHC) les utilisateurs doivent-ils utiliser / éviter?

J'ai eu l'expérience à quelques reprises aujourd'hui d'avoir GHC me dire d'utiliser une rallonge, seulement pour découvrir que lorsque dans l'utilisation de cette extension, j'ai fait un code beaucoup plus complexe qu'un simple refactoriser m'aurait permis de rester avec Haskell 98 (maintenant 2010) et ont une plus simple solution.

D'autre part, il y a aussi des moments où l'GADT ou Rank2Types (rarement RankNTypes) en font beaucoup moins de travail et beaucoup plus propre code.

Les extensions ont tendance généralement à occulter la possibilité d'une meilleure conception, et qui, en général, l'améliorer? Si il y en a qui font les deux, ce qui devrait un utilisateur de rechercher pour (être sûr de ce vrai ou pas vrai de la solution qu'ils ont l'intention) avant de décider d'utiliser cette extension?

(Voir aussi dois-je utiliser GHC Haskell extensions ou pas?)

53voto

Don Stewart Points 94361

Une liste ad hoc de moralement "bon" extensions, et moralement "mauvais" - c'est un jugement esthétique!

La Bonne

  • GADTs
  • En parallèle interprétations de la liste
  • Modèle gardes
  • Monade interprétations de la
  • Tuple sections
  • Enregistrement des cartes sauvages
  • De données vide decls
  • Existentielle types
  • Généralisée nouveau type résultant
  • MPTCs + FDs
  • Le Type de familles
  • La quantification explicite
  • De rang plus élevé de polymorphisme
  • Lexicalement étendue tyvars
  • Bang Modèles

La Mauvaise

  • SQL interprétations de la
  • Paramètres implicites

Le Laid (mais nécessaire)

  • Modèle Haskell
  • Unboxed types et les tuples
  • Indécidable, qui se chevauchent et incohérente instances -- signifie généralement que vous avez un misdesign.

Pas sûr

  • Flèche de notation
  • Afficher les modèles

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X