問題タブ [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 - do記法でhaskellリスト内包表記を書き直す
Learn you a Haskellで読んだことがありますが、Haskellのリスト内包表記はモナド結合または (実質的には同じ) do 表記として書き直すことができます。
ただし、次のコードを書き直そうとすると (指定されたリストの 1 つから各要素を持つすべての可能なリストを生成します):
そのような方法で:
次のエラーが表示されます。
の最後の行do
を this:に変更するreturn a:[b]
と、エラーは発生しませんが、結果は明らかに正しくありません:
質問は次のとおりです。
- このリスト内包表記を書き直すにはどうすればよいですか?
- リスト内包表記とdo記法は交換可能ですか?一般的にどのように交換できますか?
haskell - I/O モナドと "do" 表記の使用を理解する
私はまだ Haskell に苦労していますが、この例の Input/Output モナドに頭を悩ませる問題に遭遇しました。
Haskell のような関数型言語は関数の副作用に基づくことができないため、何らかの解決策を考案する必要があったことは理解しています。この場合、すべてをdo
ブロックにラップする必要があるようです。簡単な例が得られますが、この場合、誰かの説明が本当に必要です:
- I/O アクションに単一の
do
ブロックを使用するだけでは十分でないのはなぜですか? - if/else ケースで完全に新しいものを開く必要があるのはなぜですか?
- また、モナドの「スコープ」が
do
終了するのはいつですか?つまり、標準のHaskell用語/関数を使用できるのはいつですか?
haskell - do表記で余分な変数を避ける方法は?
Haskell do-notation ブロックで、is_root
自分が root かどうかを示す変数が必要だとします。
その煩わしいuid
変数は、その 1 つの場所でのみ使用されます。代わりに、これを書くことができればいいのにと思います:
しかし、もちろんそれはコンパイルされません。
のような余分な変数を取り除くにはどうすればよいuid
ですか? これが私が思いついた最高のものです:
ブリーチ!より良い方法はありますか?
haskell - Haskell:バインド操作の末尾の右矢印
haskellwikiから:
expr1 >>= \x ->
(>>=) 演算子の右側が気になります\x ->
。どういう意味ですか?
GHCiではNor \x ->
nor も\x
認識され:type
ません。
haskell - Reader モナドを使用する Haskell 関数のリファクタリング
私の質問に関係のないすべてのコードを無視して、次のようなコードがあります。
これをリファクタリングする方法はありますか?具体的には、ネストされたbar'
関数が最も気になります。これを1行に凝縮できますか?
function - Haskellで引数を持つ関数から描画する方法は?
do
ブロックの内部では、モナドからその内容を「抽出」して描画できることを知っています。たとえば、署名付きの関数がある場合:
do
ブロック内でこれを行うことができます:
これにより、Set Int
私が望むものが得られます。ただし、引数を取るように関数を変更すると、次のようになります。
やりたいことができなくなった:
これはエラーでコンパイルに失敗しCouldn't match expected type
、Probable cause: ‘myFunction'’ is applied to too few arguments
. このようなことを試みることは、構文的にも正しくありません:
myFunction'
私はタイプになりたいですInt -> Set Int
。私は自分がやりたいことをする方法を理解できないか、どこにも見つけられません。誰でも助けてもらえますか?
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?