Monad Typeclass(関連するタイプのクラス?)を書くのを手伝ってください
-
25-10-2019 - |
質問
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
所属していません StackOverflow