を使用して小さなプログラムを単純化するのに苦労していSystem.Console.Terminfoます。mappend複数をまとめることまではCapabilityできましたが、それらを評価する必要があるときはいつでも、getCapabilityacaseを使用してから、結果の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
...