6
我正在使用Free Monads构建一个小型DSL。是否有可能在DSL中使用免费实现多态函数
我希望能够在我的DSL中具有多态功能。
的东西,我想建立一个例子是这样的:
{-# 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'
我已经编码上面我得到Not in scope: type variable ‘a’
错误,这是有意义的方式。有没有一种方法可以在DSL中使用免费的多态功能?
为了背景,我想这样做的原因是我可以有一个生产解释器,它在幕后使用TQueue和使用内存数据结构进行测试的测试解释器。
谢谢Cirdec正是我所期待的。关于参数化队列类型的好消息。 – Brownie