問題タブ [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.

0 投票する
2 に答える
1452 参照

haskell - Haskell-デュアルパーソナリティIO/STモナド?

現在、評価にSTモナドを使用しているコードがいくつかあります。runSTメソッドが純粋な結果を生成し、そのような結果を安全に呼び出すことができることを示しているため、IOをどこにでも配置しないのが好きです(に対してunsafePerformIO)。ただし、一部のコードが長くなっているため、デバッグ用のprintステートメントをに入れたいと思います。

STまたはIO(タイプまたは「isDebug」フラグに応じて)のデュアルパーソナリティモナド[またはタイプクラスの機械]を提供するクラスはありますか?SPJが彼の「FunwithTypeFunctions」の論文で「Mutation」クラスを紹介したことを思い出します。このクラスでは、結合型を使用してIOをIORefに、STをSTRefに関連付けました。そのようなものはどこかにパッケージとして存在しますか?

編集/解決策

どうもありがとうございました[n回目]、CA McCann!pdebugそのソリューションを使用して、関数をサポートするモナド用の追加のクラスを導入することができました。STモナドはこれらの呼び出しを無視しますが、実行IOputStrLnます。

これはghciに非常に幸運な結果をもたらします。式はデフォルトでIOタイプであると想定されているため、「test 3」のようなものを実行すると、IOモナドが実行されるため、簡単にデバッグして、実際に実行するときに「testR」のようなもので呼び出すことができます。それ。

0 投票する
2 に答える
2758 参照

haskell - IOタイプを表示

重要な要素としてIORefを含むデータ型があります。showこれは、型クラスのメンバーにするためのクリーンな方法がないことを意味します。printこのタイプのIOモナドに関数があるので、これはそれほど悪くはありません。しかし、GHCiでは、これらのいずれかを返すたびに、表示できないというエラーが発生するという点で煩わしいです。

とにかくIOモナドで動作するGHCiに、IOアクションを使用して結果を表示させる方法はありますか?そうでない場合、書くことへの悪影響はありますshow a = unsafePerformIO $ print aか?

0 投票する
1 に答える
3248 参照

haskell - 「評価する」と「$ を返す」の違いは何ですか?

のドキュメントからの抜粋を次に示しますevaluate

と同じではありません

正しい定義は

ソース

これらは同じ意味のようです。これら2つの定義の違いは何ですか?

0 投票する
2 に答える
15141 参照

haskell - HaskellのIOアクションから通常の値を取得する方法

私は次の機能を持っています:

アクションではなくCharsそこから価値を引き出したいのです。私はこれをどのように行うか、あるいはそれが可能であるかどうかさえわかりません。IO

Charsタイプは基本的に単なるコンテナです。

Chars詳細はそれほど重要ではありません。この関数がの代わりにを返す方法があるかどうかを知りたいだけですIO Chars

そうでない場合、これを引数として?を取る関数に渡すにはどうすればよいCharsですか?私はHaskellI/ Oに少し慣れていませんがChars、引数として取るすべての関数を代わりに引数として取りIO Chars、それらを抽出して再パッケージ化する必要はないと思います。不要のようです。

ありがとう!

0 投票する
2 に答える
3104 参照

haskell - HaskellでIOIntをStringに変換する方法は?

Haskellで入力と出力を使うことを学んでいます。乱数を生成して別のファイルに出力しようとしています。問題は、乱数がを返しているように見えることです。これは、 usingIO Intに変換できません。Stringshow

誰かが私にここにポインタを教えてもらえますか?

0 投票する
3 に答える
304 参照

haskell - 単一のセッションで標準入力へのハンドルを移植可能に何度も開く

コード:

もっとありますが、これは関連する部分です。基本的に、3 行目は複数回評価する必要がありますが、getContents は stdin ハンドルを閉じています。

ハンドルを再び開く方法はありますか?または、 getContents がそれを行うのを防ぐ方法はありますか? (間違ったシグナルを送信しているのかもしれません。Linux で Ctrl-D EOF を送信しています。代わりに EOT などを使用する必要がありますか?)

編集: 目的の動作を得ることができましたが、Windows には移植されません。

新しい質問: stdin へのハンドルをポータブルに開く一般的な方法はありますか?

0 投票する
1 に答える
957 参照

haskell - この型シグネチャで何が起こっているのでしょうか? (Haskell の Vector.Mutable 修飾子)

Haskell の可変ベクトルには、要素レベルのミューテーターが 3 つあります。

これで問題なく使用できます --

しかし、ここで何が起こっているのでしょうか? とはPrimMonad? そしてPrimStateコンストラクターですか?

PrimMonadここでは、クラスモナドで何らかのバインディングが行われていることを理解しています。thawを返しますm (MVector (PrimState m) a)、どこmに a PrimMonad... がありますが、モナドはそれ自体を含んでいますか? m別のコンテキスト内にあるのはなぜmですか?

すべてが基本的に thisPrimStateまたはPrimMonadにバインドされていることがわかりますが、これが変更可能/保存可能なベクトルとどのように関係しているのかわかりません。状態を保存できる型クラスに何か特別なものはありますか?

お時間をいただきありがとうございます!

0 投票する
5 に答える
492 参照

multithreading - スレッドが出力をインターリーブしないようにする

次のプログラムは、同時に実行される 2 つのスレッドを作成し、それぞれがランダムな時間だけスリープしてから、テキスト行を stdout に出力します。

出力は一般的に次のようになります

一度に 1 つのスレッドだけが stdout に書き込めるようにするにはどうすればよいでしょうか? これは STM が得意とする種類のことのように思えますが、すべての STM トランザクションSTM aには一部の型が必要aであり、画面に出力するアクションには型があり、にIO a埋め込む方法はないようです。IOSTM

0 投票する
1 に答える
1084 参照

haskell - Clojure で Haskell から IO モナドを実行することは可能ですか?

私はalgo.monadsfluokittenのドキュメントを見てきました。また、 Jim DueyKonrad Hinsen、およびLeonardo Borgesによるモナドのブログ エントリも読みました。

私が見つけることができる最も近いものは、Konrad Hinsen のライブラリ Monadic IO ストリームです。

これは Haskell で ST を使用した例です

私の質問は、Clojureで Haskell から IO モナドを実行することは可能ですか? 例を挙げていただけますか?