のドキュメントは、 と を使用し
てmonad-control
インスタンスを作成する方法の例を提供します。例は次のとおりです。MonadTransControl
defaultLiftWith
defaultRestoreT
newtype
newtype CounterT m a = CounterT {unCounterT :: StateT Int m a}
newtype
この例は、「基本的な」モナド変換子を 1 つだけ使用して定義されたもの (transformers
またはのものなど)に対して機能するように調整できますmtl
。しかし、スタックに 2 つの「基本的な」トランスフォーマーが含まれている場合はどうでしょうか。たとえば、MonadTransControl
次のようなインスタンスをどのように定義できますか。
newtype T m a = T {unT :: MaybeT (StateT Int m) a}
私の問題は、次の行を調整する方法がわからないことです
newtype StT CounterT a = StCounter {unStCounter :: StT (StateT Int) a}
から、CounterT
私のT
変圧器で機能するようにします。特に、最後の括弧に何を入れればよいかわかりません。それは親切なものを期待しています(* -> *) -> * -> *
が、私はそのようなものを形成することはできません.
何か案は?