Free Monads를 사용하여 작은 DSL을 작성합니다.Free를 사용하여 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’
오류가 발생할 수 위 내가 그것을 인코딩 한 방법. Free를 사용하여 DSL에서 다형 함수를 사용하는 방법이 있습니까?
백그라운드에서 배경으로 TQueue를 사용하는 프로덕션 인터프리터와 테스트를 위해 메모리 데이터 구조를 사용하는 테스트 인터프리터를 사용할 수 있습니다.
정확하게 내가 찾고있는 Cirdec에 감사드립니다. 대기열 유형을 매개 변수화하는 데 유용한 팁. – Brownie