問題タブ [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 投票する
2 に答える
1774 参照

haskell - do記法でhaskellリスト内包表記を書き直す

Learn you a Haskellで読んだことがありますが、Haskellのリスト内包表記はモナド結合または (実質的には同じ) do 表記として書き直すことができます。

ただし、次のコードを書き直そうとすると (指定されたリストの 1 つから各要素を持つすべての可能なリストを生成します):

そのような方法で:

次のエラーが表示されます。

の最後の行doを this:に変更するreturn a:[b]と、エラーは発生しませんが、結果は明らかに正しくありません:

質問は次のとおりです。

  1. このリスト内包表記を書き直すにはどうすればよいですか?
  2. リスト内包表記とdo記法は交換可能ですか?一般的にどのように交換できますか?
0 投票する
2 に答える
387 参照

haskell - I/O モナドと "do" 表記の使用を理解する

私はまだ Haskell に苦労していますが、この例の Input/Output モナドに頭を悩ませる問題に遭遇しました。

Haskell のような関数型言語は関数の副作用に基づくことができないため、何らかの解決策を考案する必要があったことは理解しています。この場合、すべてをdoブロックにラップする必要があるようです。簡単な例が得られますが、この場合、誰かの説明が本当に必要です:

  1. I/O アクションに単一のdoブロックを使用するだけでは十分でないのはなぜですか?
  2. if/else ケースで完全に新しいものを開く必要があるのはなぜですか?
  3. また、モナドの「スコープ」がdo終了するのはいつですか?つまり、標準のHaskell用語/関数を使用できるのはいつですか?
0 投票する
2 に答える
559 参照

haskell - do表記で余分な変数を避ける方法は?

Haskell do-notation ブロックで、is_root自分が root かどうかを示す変数が必要だとします。

その煩わしいuid変数は、その 1 つの場所でのみ使用されます。代わりに、これを書くことができればいいのにと思います:

しかし、もちろんそれはコンパイルされません。

のような余分な変数を取り除くにはどうすればよいuidですか? これが私が思いついた最高のものです:

ブリーチ!より良い方法はありますか?

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

haskell - Haskell:バインド操作の末尾の右矢印

haskellwikiから: expr1 >>= \x ->

(>>=) 演算子の右側が気になります\x ->。どういう意味ですか?

GHCiではNor \x ->nor も\x認識され:typeません。

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

haskell - Reader モナドを使用する Haskell 関数のリファクタリング

私の質問に関係のないすべてのコードを無視して、次のようなコードがあります。

これをリファクタリングする方法はありますか?具体的には、ネストされたbar'関数が最も気になります。これを1行に凝縮できますか?

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

function - Haskellで引数を持つ関数から描画する方法は?

doブロックの内部では、モナドからその内容を「抽出」して描画できることを知っています。たとえば、署名付きの関数がある場合:

doブロック内でこれを行うことができます:

これにより、Set Int私が望むものが得られます。ただし、引数を取るように関数を変更すると、次のようになります。

やりたいことができなくなった:

これはエラーでコンパイルに失敗しCouldn't match expected typeProbable cause: ‘myFunction'’ is applied to too few arguments. このようなことを試みることは、構文的にも正しくありません:

myFunction'私はタイプになりたいですInt -> Set Int。私は自分がやりたいことをする方法を理解できないか、どこにも見つけられません。誰でも助けてもらえますか?

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

haskell - If/then/else in do statements (Haskell)

I've got a block of code that I've written which doesn't compile because the if/then/else block isn't set out in a way the compiler understands, however I can't figure out how to rewrite it so that it can.

basically the function uniform will divide by zero if the list is empty, so I need a way to catch this and return the empty list before carrying on with the do statement. Any advice?