私はFree Monadsを使用して小さなDSLを構築しています。Freeを使用してDSLで多態関数を実装することは可能ですか
私はDSLで多型関数を使用できるようにしたいと考えています。私は理にかなってNot in scope: type variable ‘a’
エラーを取得する上で、私はそれをコード化している方法
{-# 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'
:
私が構築したい何かの例がこれです。 Freeを使ってDSLに多相関数を持たせる方法はありますか?
私がこれをやりたい理由は、バックグラウンドでTQueueを使用するプロダクションインタープリタと、メモリデータ構造をテスト用に使用するテストインタープリタを持つことができるためです。
私が探していたCirdecに感謝します。キューの種類をパラメータ化するための素晴らしいヒント。 – Brownie