問題タブ [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.
haskell - この Haskell の let-in インデントの何が問題になっていますか?
以下の Haskell コードでは、「入力 'in' の解析エラー」というエラーが表示されます。私が読んだことから、私が使用したインデントは問題ないはずです。実際、コードの他の場所では、'let' と 'in' を同様のインデント ('let' を 'in' に揃える) で使用しています。この「イン」が問題になる原因となる、私が破ったルールは何ですか? 'in' の前にスペースを追加すると ('let' よりも 1 スペース分長くする)、正常にコンパイルされます。
すべての助けに感謝します。前もって感謝します。
haskell - do ブロック内の実行順序は、ステートメントの順序に依存しないというのは本当ですか?
https://wiki.haskell.org/Do_notation_considered_harmfulを読んでいて、次の行を読んで驚いた
初心者は、ステートメントの順序が実行の順序を決定すると考えるかもしれません。... ステートメントの順序も評価順序の基準ではありません。
wiki の投稿では、このプロパティを示すいくつかの例を示しました。例は理にかなっていますが、私はまだステートメントが真実であると完全には信じていません。
3 行は、ステートメントの順序で出てきます。では、ここで何が起こっているのでしょうか。
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)
ですか?
haskell - 関数適用の結果を DO ブロック内のタプルに格納する
関数を 2 回適用し、結果をタプルにバインドできます。
do
これは、ブロック内では実行できません (少なくとも、適切に実行する方法がわかりません) 。
GHCI REPL と入力すると、次のエラーが発生しました。
私は明らかにもっと冗長でそれを解決できます:
test
のようにせずに表現する正しい方法はありtest'
ますか?
haskell - let ステートメント内の case ステートメントに必要なインデントは?
haskell で作業して、奇妙な動作を見つけ、それを必要最低限の骨まで取り除きました
この作品
でもやってみると
私は得る
だから私は試します
そして、これは機能します。
何?なんで?この場合、なぜ追加のインデントが必要なのですか? おそらく、これらのキーワードは非常に短く、日常の言葉で一般的であるため、これについては何も見つかりません。この動作を説明する仕様はありますか?
haskell - let 内のモナド do 表記、可能ですか?
次の有効な Haskell コードを検討してください
関数は、f
このようなdo表記で同等に書き換えることができます
私を悩ませているのは、f
インラインの内容を入れると do 表記が機能しないことです。次のコードは解析さえしません。
内部let
で頼らざるを得ないというのは正しい(>>=)
ですか?
私が取り組んでいる間、次のコードも解析されません。
の不必要な制限された力以外に明らかな理由は見当たりませんlet
。bind
内部で使用するエレガントな方法はありlet
ますか?
haskell - do記法でモナド関数と純粋関数を混同する
do 記法内で純粋な関数とモナド関数を混同するのに問題があります。明らかな何かが欠けていると感じています。
たとえば、これらの関数を取得したとします
これは機能しません。
z の行ですが、純粋な fb 関数をモナドの fa および fc 関数と組み合わせるエレガントな方法は何ですか?
haskell - 結果を変更せずにアクションを追加して do 表記をリファクタリングする
Haskell で 2 つのモナド アクションを順番に作成し、2 番目のモナドによって生成された値を破棄し、両方のアクションに引数を渡したいと考えています。現在、次のような do ブロックを使用しています。
これをもう少しポイントフリーできちんと書きたいと思っていたので、これを試しました:
ただし、これは型チェックさえ行わず、問題は<*
最初のアクションの結果を 2 番目のアクションに転送しないことです。アクションを連鎖させたいのですが>>=
、結果は変えません。タイプは である必要があります(a -> m b) -> (a -> m c) -> (a -> m b)
が、Hoogleでは適切な結果が得られません。この関数構成を実現する演算子は何でしょうか?