問題タブ [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 に答える
598 参照

if-statement - Haskell-doブロックの構文(IOを使用)

コンパイラは言う

次のコードスニペットを含むファイルを読み込もうとした場合:

それ(コンパイラメッセージ)はどういう意味ですか、そしてなぜここで発生するのですか?(それはありませんが:)

(上記の例はhttp://learnyouahaskell.com/input-and-outputから取得)

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

haskell - whereバインディング、letバインディング、および単一代入演算子の違い(<-)

3つの構文の違いがわかりません。

  • where a = f (b)
  • do a <- f (b)
  • do let a = f (b)

それは他の2つとは異なりますが、私はどういうわけか理解していますa <- f(b)。ほとんどの場合、3つすべてを試してみました。また、ネット上のどこかで、「慣用的」であるためにのみ、ブロックごとに1つのletバインディングを使用するように努める必要があることを読みました。しかし、私は決してうまくいかないようです。

何を使用するかをどのように決定しますか?

0 投票する
6 に答える
6435 参照

list - リストモナドで return を使用する場合と使用しない場合

私はGrand Haskell Crusade (GHC :) )を始めましたが、モナドとIO関数について少し混乱しています。これら2つの機能の違いを簡単に説明できる人はいますか?

結果は次のとおりです。

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

haskell - Haskell でのバインドと代入

私は自分でスキームを書くチュートリアルに取り組んでいます.1つのコードブロックを見て、バインドと代入の違いについて疑問に思いました:

なぜlet atom =代わりにatom <-?したがって、私は試しました:

そして、コンパイルエラーが発生します:

doこれが何を意味するのか正確にはわかりませんが、これはおそらくまたは モナドの不正確な理解によるものです。(私はHaskell の学習を他のさまざまなモナド/do チュートリアルと一緒に読んだことがあります。他の SO の質問では、インデントがここで問題を引き起こすことがよくあることに注意してください。ただし、正しくインデントしていると思います)

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

haskell - do表記とletのパターンマッチング

最近、 threepenny-gui の使用中にエラーが発生しまし た。コードを do 表記のパターン マッチから<-let 表記のパターン マッチに変更することで解決しました。

これら 2 つの形式のパターン マッチングを変更するときに動作の変更を予期する必要がある理由はありますか?

具体的には、次のコード:

IO モナドでは:

に変更されました:

これは私のために問題を修正したコミットへのリンクです :

追加のプラットフォームの詳細: os: 10.8.5 ghc: 7.6.3

編集:これがIOモナドで起こっているという事実を追加しました

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

haskell - F# で (モナド) 計算の結果を正しく破棄する方法

Haskell では、次のように記述できます。

F# では、ここまで来ました。

つまり、この未使用のバインドを導入してlet! _ =、不要な「スペース」パーサー (モナド) の解析値を破棄する必要があります。

F# でこれらの役に立たないバインディングを回避するにはどうすればよいですか? do! を使用してみましたが、エラーが発生しました (私の>>=関数は型単位ではなく 'a を取るため):

これが私のビルダー定義です:

>>関数を定義する必要がありますか? ビルダーに Combine() を追加しますか? これを正しく行う方法はありますか?コード例?