問題タブ [io-monad]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
haskell - Haskell: IO と [] によるモナド スタック バインド
私は持っている:
そして、私はしたいです
しかし、私のタイプはオフです。私は本質的にリフトバインドをしたいのですが、私が試みるすべてが微妙に間違っています.
haskell - Haskell IO do ブロックで割り当てを結合および分割する
私は、IO モナドを含む、do ブロックでの変数代入の仕組みに関する 2 つの場所で、言語について同様の誤解をしていると/思います。(1)それは同じ誤解ですか、(2)それを解決する方法を理解するのを手伝ってもらえますか(回答で、特にこの件に関するお気に入りの参照がある場合)?
すべてが 1 行の場合は操作を正常に実行できますが、読みやすくするために 2 つに分割しようとするとうまくいきません。
パート I: 1 行を 2 行にする
なぜこれが機能するのですか?
しかし、これは機能しません
私に与えます:
最初と 2 番目の違いは、クエリ部分を q に格納しようとしていることです。
パート II: 2 行を 1 行に
なぜこれが機能するのですか:
しかし、これは機能しませんか?
私に与えます
haskell - Haskell & Scrypt: 暗号化されたハッシュを取得する方法
*初歩的な質問ですみません、Haskellを学び始めたばかりです。
文字列を取得して暗号化されたハッシュを返す関数を作成しようとしています。
現時点で私が思いついたのは次のとおりです。
ただし、次のエラーが表示されます。
どうすればIOを取り除くことができますか?
ありがとう!
haskell - ExceptT a IO のようなモナド スタックでリソースを管理する最良の方法は何ですか?
良くも悪くも、Haskell の人気のあるServantライブラリにより、 を含むモナド変換子スタックでコードを実行することが一般的になりましたExceptT err IO
。サーバント自身のハンドラーモナドはExceptT ServantErr IO
. 多くの人が主張するように、展開に失敗するには複数の方法があるため、これは動作するのがやや面倒なモナドです: 1) ベースからの通常の例外を介して、または 2) を返す。IO
Left
Ed Kmett のexceptions
ライブラリが役立つように次のように説明しています。
継続ベースのモナド、および
ErrorT e IO
複数の失敗モードを提供するようなスタックは、この [MonadMask
] クラスの無効なインスタンスです。
これは、リソース管理を行うための便利な [のポリモーフィック バージョン] 関数にMonadMask
アクセスできるため、非常に不便です (例外などによるリソースのリークはありません)。bracket
しかし、サーバントのHandler
モナドでは使えません。
私はあまり詳しくありませんが、解決策はmonad-control
多くのパートナーライブラリを使用することでありlifted-base
、lifted-async
モナドに次のようなリソース管理ツールへのアクセスを許可することであると言う人もいますbracket
(おそらくこれはExceptT err IO
友人にも機能しますか?)。
しかし、それはコミュニティで支持を失ってmonad-control
いるようですが、代替案が何であるかはわかりません. Snoyman の最近のライブラリでさえ、Kmett のライブラリを使用し、.safe-exceptions
exceptions
monad-control
Haskell を真剣に使用しようとしている私のような人々のために、誰かが現在の話を明確にすることができますか?
haskell - Haskell の mapM での実行順序
次の Haskell ステートメントを検討してください。
実際、これは「1」、「2」、「3」を順番に出力します。
質問:最初に "1" を出力し、次に"2" を出力し、最後に"3"を出力することをどうやって知ることmapM
ができますか? これを行うという保証はありますか?それとも、GHC の奥深くで実装されているのは偶然ですか?