問題タブ [do-notation]

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 投票する
1 に答える
268 参照

haskell - この Haskell の let-in インデントの何が問題になっていますか?

以下の Haskell コードでは、「入力 'in' の解析エラー」というエラーが表示されます。私が読んだことから、私が使用したインデントは問題ないはずです。実際、コードの他の場所では、'let' と 'in' を同様のインデント ('let' を 'in' に揃える) で使用しています。この「イン」が問題になる原因となる、私が破ったルールは何ですか? 'in' の前にスペースを追加すると ('let' よりも 1 スペース分長くする)、正常にコンパイルされます。

すべての助けに感謝します。前もって感謝します。

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

haskell - do ブロック内の実行順序は、ステートメントの順序に依存しないというのは本当ですか?

https://wiki.haskell.org/Do_notation_considered_harmfulを読んでいて、次の行を読んで驚いた

初心者は、ステートメントの順序が実行の順序を決定すると考えるかもしれません。... ステートメントの順序も評価順序の基準ではありません。

wiki の投稿では、このプロパティを示すいくつかの例を示しました。例は理にかなっていますが、私はまだステートメントが真実であると完全には信じていません。

3 行は、ステートメントの順序で出てきます。では、ここで何が起こっているのでしょうか。

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

haskell - do 表記とバインディングを理解する

私は haskell に非常に慣れていないので、このドキュメントhttps://www.cs.nott.ac.uk/~gmh/pearl.pdfで Monadic パーサーを作成するために使用される方法論を理解しようとしています。

正確に従うのではなく、正しく理解するために少し異なる方法で実行しようとしているため、最終的にこのコードになりました

これは機能しているように見えますが、do 表記で何が起こっているのかを理解するのに苦労しています。

例えば; ではc1 <- item、何に割り当てられていc1ますか? 型に含まれているのは関数Parserですか、その計算の結果ですか、それとも他に何ですか? さらに、do 表記の 2 行目は justitemなので、実行するだけでitem結果を代入しないのですか? 最後に、何return (c1,c2)を生成しますか? それですか、Parser (String -> Maybe ((c1, c2)), String)それともただJust (c1, c2)ですか?

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

haskell - 関数適用の結果を DO ブロック内のタプルに格納する

関数を 2 回適用し、結果をタプルにバインドできます。

doこれは、ブロック内では実行できません (少なくとも、適切に実行する方法がわかりません) 。

GHCI REPL と入力すると、次のエラーが発生しました。

私は明らかにもっと冗長でそれを解決できます:

testのようにせずに表現する正しい方法はありtest'ますか?

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

haskell - let ステートメント内の case ステートメントに必要なインデントは?

haskell で作業して、奇妙な動作を見つけ、それを必要最低限​​の骨まで取り除きました

この作品

でもやってみると

私は得る

だから私は試します

そして、これは機能します。

何?なんで?この場合、なぜ追加のインデントが必要なのですか? おそらく、これらのキーワードは非常に短く、日常の言葉で一般的であるため、これについては何も見つかりません。この動作を説明する仕様はありますか?

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

haskell - let 内のモナド do 表記、可能ですか?

次の有効な Haskell コードを検討してください

関数は、fこのようなdo表記で同等に書き換えることができます

私を悩ませているのは、fインラインの内容を入れると do 表記が機能しないことです。次のコードは解析さえしません。

内部letで頼らざるを得ないというのは正しい(>>=)ですか?

私が取り組んでいる間、次のコードも解析されません。

の不必要な制限された力以外に明らかな理由は見当たりませんletbind内部で使用するエレガントな方法はありletますか?

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

haskell - do記法でモナド関数と純粋関数を混同する

do 記法内で純粋な関数とモナド関数を混同するのに問題があります。明らかな何かが欠けていると感じています。

たとえば、これらの関数を取得したとします

これは機能しません。

z の行ですが、純粋な fb 関数をモナドの fa および fc 関数と組み合わせるエレガントな方法は何ですか?

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

haskell - 結果を変更せずにアクションを追加して do 表記をリファクタリングする

Haskell で 2 つのモナド アクションを順番に作成し、2 番目のモナドによって生成された値を破棄し、両方のアクションに引数を渡したいと考えています。現在、次のような do ブロックを使用しています。

これをもう少しポイントフリーできちんと書きたいと思っていたので、これを試しました:

ただし、これは型チェックさえ行わず、問題は<*最初のアクションの結果を 2 番目のアクションに転送しないことです。アクションを連鎖させたいのですが>>=、結果は変えません。タイプは である必要があります(a -> m b) -> (a -> m c) -> (a -> m b)が、Hoogleでは適切な結果が得られません。この関数構成を実現する演算子は何でしょうか?