23
foo :: Maybe Int
と私はそれをバインドしたいとします。例えば、bar :: Int -> MaybeT (Writer String) Int
としたいのですが、どうすればよいでしょうか?MaybeTに何かの値を注入するには
私は自分liftMaybe
関数を定義して、それを使う、などの可能性:
let liftMaybe = maybe (fail "Nothing") return in liftMaybe foo >>= bar
しかし、それを行うには、より慣用的な(あるいは少なくとも簡潔な)方法はありますか?
Thx、これは既に改善点です。しかし、私たちはもっと良くすることができますか? – user1078763
「おそらくmzero return」より?疑わしい;それはすでに非常に短いです。私はあなたがそれを使うあらゆるところでこれをインライン展開することを勧めません。それを共通のモジュールに入れる方がずっと良い考えです。 – ehird
これは 'fmapT ::(Monad m、Monad n、MonadTransformer t)=>(forall a。ma - > na) - >(forall a。tma - > tna)'のようなものの具体的な使用と見ることもできます。 「Maybe」は実際には「MaybeT Identity」と偽っている場合に限ります。私はその機能が完全な一般性では可能だとは思っていませんが、インスタンスとして特定のモナド・トランスを持つタイプ・クラスにすることができます。 –