モナディックデータ型を設計するためにいくつかの助けが必要です。アイデアに頭を悩ませるのに苦労しているようですが、私は自分が何を望んでいるかをかなり確実に知っています。タイプチェッカーだけがその点でいくらかの説得を必要とするようです。
私が欲しいのはPrimitive、モナドになることができるいくつかのデータ型です。Parserその関数は基本的に描画プリミティブであり、ライブラリの型と同じように、それらを組み合わせたり、組み合わせをプリミティブにしたりできるようにしたいと考えていますparsec。IOしかし、実際の描画はモナドで行う必要があります。
ちなみに、私もDrawable aこのようなクラスを持っています:
class Drawable a where
draw :: (MonadIO m) => Pos -> a -> m ()
そしてもちろん、すべてのプリミティブを描画可能にしたいと思います。どんな入力にも感謝しています。