Buduję małe DSL za pomocą Free Monads.Czy jest możliwe zaimplementowanie funkcji polimorficznych w DSL przy użyciu Free
Chciałbym mieć funkcje polimorficzne w moim DSL.
Przykładem coś chciałbym zbudować to:
{-# 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'
sposób mam zakodowane go powyżej mam Not in scope: type variable ‘a’
błędy, które ma sens. Czy istnieje sposób na funkcje polimorficzne w DSL za pomocą Free?
Dla tła powód, dla którego chciałbym to zrobić, jest taki, że mogę mieć interpreter produkcyjny, który używa TQueue za sceną i interpretera testowego, który wykorzystuje strukturę danych w pamięci do testowania.
Dziękuję Cirdec, że dokładnie to, czego szukałem. Dobra wskazówka dotycząca parametryzowania typu kolejki. – Brownie