を使用して小さなプログラムを単純化するのに苦労していSystem.Console.Terminfo
ます。mappend
複数をまとめることまではCapability
できましたが、それらを評価する必要があるときはいつでも、getCapability
acase
を使用してから、結果のMaybe
. いつも同じパターン
Just ... -> runTermOutput ...
Nothing -> return ()
ですから、これを行うためのより良い方法が必要だと思います。パターンマッチングが に置き換わっているように見えるMaybe
のでIO
、モナドトランスフォーマーの目的ではないかと思いました。Capability
定義を見ると、
> :i Capability
newtype Capability a
= System.Console.Terminfo.Base.Capability (Terminal
-> IO (Maybe a))
...
MaybeT
ここで StackOverflow で見つけた例と似ていますが、関数であるという事実は私を混乱させます。(さらに、例を 1 つ読んだだけでは、モナド変換子を理解しているとは言えません。)
私は正しい軌道に乗っていますか?case
これを何度も何度も書くのを避けるのに役立つ別のパターンはありますか?
getCapability
タイプは次のとおりです。
> :i getCapability
getCapability :: Terminal -> Capability a -> Maybe a
...