7

J'essaie de comprendre les transformateurs monad en mettant en œuvre ma propre petite bibliothèque basée sur les conceptions existantes.Quelles sont les extensions de langage requises par la bibliothèque MTL?

Ce sur quoi je suis bloqué, ce sont les extensions de langue. Dans MonadError, la seule extension mentionnée est UndecidableInstances. Cependant, je ne peux pas obtenir un code similaire à compiler sans utiliser également FunctionalDependencies et FlexibleInstances.

exemple que je crois FunDeps exige:

class (Monad m) => MonadError e m | m -> e where 

Et une instance souple:

instance MonadError e m => MonadError e (MaybeT m) where 

Comment le code MonadError éviter les deux extensions supplémentaires?

Répondre

11

Vous n'avez pas à épeler toutes les extensions dans le fichier source lui-même. Les extensions communes utilisées par tous/tous les modules peuvent être listées dans le fichier cabal du projet. En mtl's case:

extensions: 
    MultiParamTypeClasses 
    FunctionalDependencies 
    FlexibleInstances 
+7

Note: Vous pouvez faire cela, mais beaucoup de gens préfèrent préciser les extensions avec 'Language' pragma dans chaque fichier. De cette façon, les fichiers peuvent être autonomes et ghci-able, et il est facile de voir quelles extensions chaque fichier utilise, car il n'est pas nécessaire d'activer chaque extension pour chaque fichier. Cela dépend des extensions que vous utilisez, et de façon omniprésente. – shachaf

+1

@shachaf: Absolument. Bon point. Moi aussi, je préfère personnellement épeler chaque extension dans chaque fichier source qui les utilise. – shang

+2

Les deux sont utiles. Je pense que l'approche recommandée devrait être d'épeler les extensions nécessaires par fichier en utilisant un pragma 'LANGUAGE', et d'enregistrer les extensions nécessaires pour un paquet dans le champ' other-extensions' de Cabal. La liste 'other-extensions' n'est pas activée par défaut, mais elle peut toujours servir à comprendre les exigences d'extension d'un paquet (sans avoir à regarder tous les fichiers source individuellement). – kosmikus

Questions connexes