monad-transformers

    5

    1答えて

    これは私の最初のモナドトランスフォーマーとの知り合いです。 私はStateT MyMonad MyType型のdoブロックの中にいるとしましょう。同じ型の別の関数が状態を変更してMyMonad MyType型の値を返すようにしたいとします。それをどうすれば実現できますか?私は例をhere guessSessionでそれを表示すると思うが、私はそれを適用する方法を理解できないようです!

    15

    3答えて

    一つは、右のモナドにlift操作に必要です。単一liftここと悪いありませんが、時にはこのように見えるの機能があります。 fun = do lift a lift b c lift d lift e f 私はこのように、この関数を記述できるようにしたいと思います: fun = monadInvert $ do a

    13

    1答えて

    私はウェブアプリを書くことで遊んでいます。この場合、私はscottyとredisを使用していますが、この問題はどのWeb/dbコンボでも発生します。私はこれの前にハッシュスタックを使用していたので、そこにも例が大好きです。 スコッティは、あなたがルート内のデータベース接続へのアクセスが容易になり、ネストされたモナド、中にルートを定義していますWeb.Scotty.ActionM(): main =

    6

    2答えて

    私は4ビットのマイクロプロセッサをエミュレートしています。私は、レジスタ、メモリ、実行中の出力(フェッチ実行サイクルカウンタを持つためのボーナスポイント)を追跡する必要があります。私はモナドなしでこれを行うことができましたが、それはあまりにも多くのものを明示的に一気に渡しています。また、関数の定義が乱雑で長くて読みにくいです。 私はモナドでこれをしようとしましたが、それだけでは合わないのです。私は

    11

    2答えて

    トランスパッケージを見て、IdentityTというモナド変圧器が見つかりました。 私はアイデンティティモナドを使用する方法を理解する(例えばStateがStateT Identityのためだけのエイリアスです)、どのようにモナド変圧器は、一般的に動作しますが、私はそれがIdentityTにどのように関連するか見当がつかない。 MTLにはないので、完全性のためにそこに追加されていると思いますが、実用

    1

    1答えて

    単純なモナドトランスEntityBuilderTが定義されています。これはちょうどReaderTより新しいタイプです。 data EntityBuilderState = ... newtype EntityBuilderT m a = EntityBuilderT (ReaderT EntityBuilderState m a) は、私は次のコンビネータを書かれている、新しい「環境」の機

    5

    1答えて

    バランスブラケットの問題を解決しようとしています。私は連続IOをしたくないので、むしろgetLineを1回呼び出して、結果の文字列を解析します。したがって、問題を解決する関数は、2つの異なる状態、すなわち入力文字列の消費されていない部分とブラケットスタックを処理します。 私は、スタック操作するためのいくつかの機能を設定したい:しかし、私はStateTモナドで動作しています、 type Stack

    6

    2答えて

    現在、私はListTモナドトランスを多用しているプロジェクトを書いています。プレーン・リストを使用する場合、非決定性の実装は非常に簡単です。しかし、一度コードをListTに変換しなければならないと、はるかに複雑になりました。。 簡単な例として:ListT aに[a]からの変換は、実際には2つの機能を構成する必要があります。 conv :: (Monad m) => [a] -> ListT m a

    5

    2答えて

    私はHaskellでエラーを処理するために次のモナドトランスフォーマーを持っています。 instance (Monad m, Error e) => Monad (EitherT e m) where return = EitherT . return . return m >>= k = EitherT $ do a <- runEitherT m

    23

    1答えて

    foo :: Maybe Intと私はそれをバインドしたいとします。例えば、bar :: Int -> MaybeT (Writer String) Intとしたいのですが、どうすればよいでしょうか? 私は自分liftMaybe関数を定義して、それを使う、などの可能性: let liftMaybe = maybe (fail "Nothing") return in liftMaybe foo >