zu implementieren Ich baue ein kleines DSL mit Free Monads.Ist es möglich, polymorphe Funktionen in einem DSL mit Free
Ich möchte in meinem DSL polymorphe Funktionen haben können.
Ein Beispiel für etwas, das ich ist dies bauen mag:
{-# 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'
Das ich es oben Ich Not in scope: type variable ‘a’
Fehler erhalten codierten Weise
Für Hintergrund der Grund, den ich dies tun möchte, ist, damit ich einen Produktionsinterpreter haben kann, der TQueue hinter den Kulissen und einen Testinterpreter verwendet, der eine In-Memory-Datenstruktur zum Testen verwendet.
Vielen Dank Cirdec, das ist genau das, was ich gesucht habe. Netter Tipp zum Parametrieren des Queue-Typs. – Brownie