Je pense à des façons d'utiliser le système de type Haskell pour renforcer la modularité d'un programme. Par exemple, si j'ai une application Web, je suis curieux de savoir s'il existe un moyen de séparer tout le code de la base de données du code CGI du code du système de fichiers du code pur.Utilisation du système de type de Haskell pour renforcer la modularité
Par exemple, je suis envisager une monade DB, donc je pourrais écrire des fonctions comme:
countOfUsers :: DB Int
countOfUsers = select "count(*) from users"
Je voudrais qu'il soit impossible d'utiliser des effets secondaires autres que ceux pris en charge par la DB monade. J'imagine une monade de niveau supérieur qui serait limitée aux gestionnaires d'URL directs et serait capable de composer des appels à la monade DB et la monade IO.
Est-ce possible? Est-ce sage?
Mise à jour: J'ai fini par y parvenir avec Scala au lieu de Haskell: http://moreindirection.blogspot.com/2011/08/implicit-environment-pattern.html
Merci, Don! L'ancienne solution ressemble à ce que je cherche. Connaissez-vous des paquets spécifiques qui utilisent cette technique, ou de bons termes à google pour ("Mono IO restreint" n'a pas beaucoup augmenté)? – Bill
Un bon exemple du concept 'tay monad', http://blog.sigfpe.com/2007/04/trivial-monad.html –
Merci. Si je choisis d'utiliser le modèle "monad contaminé" pour mon monad DB, que puis-je faire pour extraire les données de la monade DB? Mon gestionnaire d'action HTTP doit-il utiliser un transformateur monad avec DB? – Bill