のドキュメントは、 と を使用し
てmonad-controlインスタンスを作成する方法の例を提供します。例は次のとおりです。MonadTransControldefaultLiftWithdefaultRestoreTnewtype
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変圧器で機能するようにします。特に、最後の括弧に何を入れればよいかわかりません。それは親切なものを期待しています(* -> *) -> * -> *が、私はそのようなものを形成することはできません.
何か案は?