Monad Typeclass(関連するタイプのクラス?)を書くのを手伝ってください

StackOverflow https://stackoverflow.com/questions/7304406

質問

DSL(ドメイン固有の言語)Monadの基本的なアクションを指定するMonadタイプクラスを書きたいと思います。

class Monad 𝔪 => MyDSLMonad 𝔪 where
    type ExprTyp 𝔪 :: * -> *
    var :: String -> ExprTyp 𝔪 α -> 𝔪 (ExprTyp 𝔪 α)

どこ ExprType 式タイプを示します var 新しい変数宣言を導入します。

アイデアは、私がベースモナドを持っているということです Base 実装 MyDSLMonad, 、多分それはただのことで働いています Int'砂 Bool'S、およびその後、高レベルの抽象化は、より高いレベルのタイプで動作するMonad Transformersです。

ただし、の実装 Base's var 機能は、それが機能するだけであるという事実に依存する可能性があります Int'砂 Bool's、そして何らかの種類のクラスの制約が必要です var 関数。だから、私はようなものが欲しいです

class Monad 𝔪 => MyDSLMonad 𝔪 where
    type ExprTyp 𝔪 :: * -> *
    class ValidTypes 𝔪
    var :: ValidTypes 𝔪 α => String -> ExprTyp 𝔪 α -> 𝔪 (ExprTyp 𝔪 α)

instance MyDSLMonad Base where
    class ValidTypes Base = MyClass

私は知っています rmonads これはいくつかのタイプのケースを介して行いますが、より良い方法はありますか?また、私はちょっとモナドトランスフォーマーが好きです StateT 通常のMonadsパッケージで... :)

役に立ちましたか?

解決

まだ良い方法はありません。 Max BolingbrokeはGHCでこれを構築しています。見る https://twitter.com/mbolingbroke, 、ここに例があります: http://hpaste.org/50576

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top