問題タブ [monads]
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 - 誰かモナドを説明できますか?
重複の可能性:
モナドとは?
「Maybe Monads」が何であるかは理解していると思いますが、他のタイプについてはわかりません。
haskell - モナドとは何ですか?
最近Haskellを簡単に見てきましたが、モナドが本質的に何であるかについて、簡潔で簡潔で実用的な説明は何でしょうか?
私が出くわしたほとんどの説明は、かなりアクセスできず、実用的な詳細が不足していることがわかりました。
haskell - Haskell で一般的な memoize 関数を作成するにはどうすればよいですか?
これに関する他の投稿を見たことがありますが、Haskell でこれを行うクリーンな方法はありますか?
第2部として、関数をモナドにせずに行うこともできますか?
haskell - do ブロックの case 式の Haskell 構文
ブロックcase
内の式に関するこの構文の問題がよくわかりません。do
正しい構文は何ですか?
私の例を修正して説明できれば、それが最善です。
少し更新。私のソース ファイルはスペースとタブが混在していて、あらゆる種類の問題を引き起こしていました。Haskell を始める人へのヒントです。問題がある場合は、ソース コード内のタブとスペースを確認してください。
haskell - モナドを型クラスに制限する
Haskellでは、型クラスの制約を満たすM a
ようにモナドを制限する方法はありますか?a
確率的モデリングの例をF#からHaskellに翻訳しています。ただし、Haskellではに変更されるので省略しましsupport
た。この変更により、次のエラーが発生します。data Distribution a
data (Ord a) => Distribution a
実際、always
/のタイプreturn
は次のとおり(Ord a) => a -> Distribution a
です。モナドを持つことができる方法はありますが、このモナドDistribution
に制約(Ord a)
を強制しますか?私は試した:
しかし、エラーが発生します:
したがって、モナドを持つ方法はありますが、 ?などの制約でM a
制限します。a
Ord a
ありがとう。
functional-programming - モナドを実装する言語は静的に型付けされなければなりませんか?
私は関数型プログラミングスタイルを学んでいます。Don't Fear the Monadsで、Brian BeckmanはMonad について素晴らしい紹介をしました。彼は、Monad は複雑さに対処するための関数の合成に関するものであると述べました。
Monad には、
unit
型 T を増幅された型 M(T) に転送する関数が含まれています。T から M(U) への関数を指定すると、型 M(T) を別の型 M(U) に変換する Bind 関数。(U は T である可能性がありますが、必ずしもそうとは限りません)。
私の理解では、モナドを実装する言語は静的に型チェックする必要があります。そうしないと、コンパイル中に型エラーを見つけることができず、「複雑さ」が制御されません。私の理解は正しいですか?
haskell - モナドのクリエイティブな使い方
モナドから学ぶためのクリエイティブな使い方を探しています。AI などでモナドが使用されていることをどこかで読んだことがありますが、モナドの初心者であるため、その方法がわかりません。
ソース コードと使用例へのリンクを含めてください。標準モナドはありません。
haskell - Haskellモナド関数の使い方の良い例はありますか?
Haskellモナド関数は理解しにくいですが、使用例はどこにありますか?
haskell - Haskell 状態モナドの使用はコードのにおいがする?
「コードの匂い」という言葉は嫌いですが、これ以上正確なものは思いつきません。
コンパイラの構築、言語設計、関数型プログラミング (コンパイラは Haskell で書かれています) について学ぶために、空き時間にWhitespaceに高水準言語とコンパイラを設計しています。
コンパイラのコード生成フェーズでは、構文ツリーをたどる際に「状態」のようなデータを維持する必要があります。たとえば、フロー制御ステートメントをコンパイルするとき、ジャンプ先のラベルに一意の名前を生成する必要があります (ラベルは、渡され、更新され、返されたカウンターから生成され、カウンターの古い値を二度と使用してはなりません)。もう 1 つの例は、構文ツリーでインライン文字列リテラルに遭遇した場合です。それらはヒープ変数に永続的に変換する必要があります (ホワイトスペースでは、文字列はヒープに格納するのが最適です)。現在、これを処理するためにコード生成モジュール全体を状態モナドにラップしています。
コンパイラを書くことは関数型パラダイムに適した問題だと言われたことがありますが、私はこれを C で設計するのとほぼ同じ方法で設計していることに気付きました (C は実際にはどの言語でも書くことができます。 Haskell と状態モナド)。
Haskell 構文を使用した C ではなく、Haskell で (むしろ関数型パラダイムで) 考える方法を学びたいです。状態モナドの使用を本当に排除/最小化しようとするべきですか、それとも正当な機能的な「設計パターン」ですか?