Je construis un petit DSL en utilisant Free Monads.Est-il possible de mettre en œuvre des fonctions polymorphes dans un DSL en utilisant Free
Je voudrais pouvoir avoir des fonctions polymorphes dans mon DSL.
Un exemple de quelque chose que je voudrais construire est ceci:
{-# LANGUAGE TemplateHaskell #-}
import Control.Monad.Free.Church
data Queue a = Queue a
data MyDsl next =
NewQueue (Queue a -> next) |
WriteToQueue (Queue a) a next
makeFree ''MyDsl
testProgram :: F MyDsl
testProgram = do
(intQueue :: Queue Int) <- newQueue
(charQueue :: Queue Char) <- newQueue
writeToQueue intQueue 1
writeToQueue charQueue 'c'
La façon dont je l'ai codé ci-dessus je reçois Not in scope: type variable ‘a’
erreurs ce qui est logique. Y at-il un moyen d'avoir des fonctions polymorphes dans un DSL en utilisant Free? Pour l'arrière-plan la raison pour laquelle je voudrais faire ceci est que je puisse avoir un interprète de production qui utilise TQueue dans les coulisses et un interpréteur de test qui utilise une structure de données en mémoire pour les tests.
Merci Cirdec c'est exactement ce que je cherchais. Bon conseil sur le paramétrage du type de file d'attente. – Brownie