Question

Lorsque vous travaillez avec des instances dérivées dans Haskell, est-il possible d'obtenir des fonctions pour les types arbitraires, ou sommes-nous limités à des fonctions particulières?

Était-ce utile?

La solution

Vous pouvez obtenir des instances des classes suivantes haskell 98:. Eq, Ord, Enum, Ix, Borné, Lire et Afficher

En utilisant les extensions GHC, vous pouvez également obtenir des instances des classes suivantes: typable, données, foncteurs, Pliable et traversable. Il y a aussi une extension GHC qui permet à un newtype de tirer des instances de ce type de mise en œuvre.

Vous ne pouvez pas déduire des instances de classes arbitraires pour la simple raison que haskell ne sais pas comment générer les fonctions nécessaires sans connaissances particulières au sujet de la classe en question.

Autres conseils

Vous êtes limité à des classes particulières, en termes de ce que le compilateur sait comment tirer pour vous. L'utilisation d'un préprocesseur ou modèle Haskell, vous pouvez vous coder de nouveaux mécanismes dérivés, si vous connaissez des approches générales pour rendement mises en œuvre de fonctions pour des types particuliers.

Les deux autres réponses sont correctes. Mais si vous avez besoin de plus, il y a des paquets sur hackage qui peut gérer plus. J'aime Data.Derive beaucoup, puisque vous pouvez générer le code source directement (pour la compatibilité) ou crochet dans modèle Haskell de le faire au moment de la compilation. Une large gamme de classes sont déjà pris en charge, et il est très facile d'ajouter le support pour votre propre. Résumé: pas de publicité pour une bibliothèque sacrément bien: -)

Pour ajouter à la réponse de Don: dériver des fonctionnalités personnalisées pour les types de données est appelée programmation générique et il y a un de la littérature à ce sujet. Préprocesseurs et modèle Haskell ne sont pas les seules solutions; voir l'un des documents de vue d'ensemble que la liste de la littérature pour d'autres options.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top