問題タブ [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.

0 投票する
3 に答える
2507 参照

.net - 状態モナド、なぜタプルではないのですか?

私はちょうどモナド(少なくとも私は持っていると思いたい)とより具体的には状態モナドに頭を包み込みました。 .

とにかく、状態モナドは通常、次のような M<'a> で実装されます (F#):

ここで私の質問: ここでタプルを使用できない理由はありますか? MonadA<'a, 'b>それ以外の場合、とwhichの間のあいまいさの可能性は、MonadB<'a, 'b>両方とも同等の('a * 'b)タプルになります。

編集:わかりやすくするために例を追加

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

haskell - 継続モナド「インターフェース」

状態モナド「インターフェース」

(+ return と bind) により、コンストラクターを使用せずに State モナドを使用して可能な計算を構築できますState。たとえば、次のState $ \s -> (s+1, s-1)ように記述できます。

同様に、とを使用Readerしてその計算を作成できるため、コンストラクターを使用する必要はありません。正確には: .askreturn(>>=)Reader f == ask >>= return . f

継続についても同じことが当てはまりますか - Cont r ausingのすべてのインスタンスcallCC( の唯一の関数MonadCont) を記述し、 return と bind を作成して、 のようなものを入力しないことは可能Cont (\c -> ...)ですか?

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

haskell - カスタム モナド トランスフォーマーを作成するために (>>=) 関数を実装しようとしたときのタイプ エラー

将来のプロジェクトのためにモナド変換子を作成しようとしていますが、残念ながら、モナド型クラスの (>>=) 関数の実装が機能しません。

まず、基礎となるモナドの実装は次のとおりです。

ここで、Monad 型クラスの実装は GHC によって ( GeneralizedNewtypeDerivinglanguage プラグマを使用して) 自動的に行われます。モナド変換子は次のように定義されます。

問題は、Monad typeclasse の (>>=) 関数をインスタンス化する方法に起因します。

私の見方では、最初は基礎となるモナド>>=で実行されます。mしたがって、runRuntimeT x >>=タイプの値を返しますRuntime a(そうですか?)。次に、次のコードid >>=は type の値を返す必要がありますa。この値は、 type の関数 f に渡されf :: (Monad m) => a -> RuntimeT m bます。

ここで型の問題が発生します。f関数の型が (>>=) 関数で必要な型と一致しません。これを首尾一貫させることができますか?これが機能しない理由はわかりますが、機能的なものに変えることはできません。

編集:エラーメッセージ:

助けてくれてありがとう、
チャーリー P.

0 投票する
3 に答える
681 参照

haskell - モナドライターmとどちらかeは断固として二重ですか?

Writer mEither eモナドの間には二重の関係があることに気づきました。mがモノイドの場合、

モナドを形成するために使用できます:

()のデュアルはボイド(空のタイプ)であり、製品のデュアルは余積です。すべてのタイプeに「コモノイド」構造を与えることができます。

明白な方法で。今、

これがEither eモナドです。矢印はまったく同じパターンに従います。

質問:与えられたモノイドに応じて、Either eおよびの両方を実行できる単一のジェネリックコードを作成することは可能ですか?Writer m

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

c# - Func + 拡張メソッド + ラムダの C# のあいまいさ

私はこの記事を通して自分の道を歩もうとしてきました:

http://blogs.msdn.com/wesdyer/archive/2008/01/11/the-marvels-of-monads.aspx

...そして、1ページ目の何かが私を不快にさせました。特に、私は Compose<>() 関数に頭を悩ませようとしていたので、自分用に例を書きました。次の 2 つの Func を考えてみましょう。

問題ない!この2つが何をするのかを理解するのは簡単です。

ここで、記事の例に従って、次のように、これらの関数を構成する汎用拡張メソッドを記述できます。

罰金。だから今、あなたは言うことができます:

そして、文字列「50%」を取得します

ここまでは順調ですね。

しかし、ここにはあいまいなことがあります。別の拡張メソッドを作成すると、次の 2 つの関数が作成されたとします。

ここが曖昧です。これら 2 つの関数の署名が重複していませんか? はい。これでもコンパイルできますか?はい。どっちが呼ばれる?2番目のもの(明らかに「間違った」結果が得られます)が呼び出されます。いずれかの関数をコメント アウトしても、コンパイルは実行されますが、異なる結果が得られます。

つまらないことのようですが、ここには私の感性を深く怒らせる何かがあり、指を置くことはできません. 拡張メソッドと関係がありますか?ラムダと関係がありますか?それとも、 Func<> を使用して戻り値の型をパラメーター化する方法と関係がありますか? わからない。

これはすべて仕様のどこかで対処されていると思いますが、これを見つけるためにGoogleが何をすべきかさえわかりません.

ヘルプ!

0 投票する
20 に答える
158261 参照

oop - 平易な英語でモナド?(FP のバックグラウンドがない OOP プログラマー向け)

OOP プログラマーが (関数型プログラミングのバックグラウンドがなくても) 理解できる用語で言えば、モナドとは何ですか?

どのような問題を解決し、最も一般的に使用される場所は何ですか?

アップデート

私が探していた理解の種類を明確にするために、モナドを持つ FP アプリケーションを OOP アプリケーションに変換していたとしましょう。モナドの役割を OOP アプリに移植するにはどうしますか?

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

scala - この非同期JavaネットワークAPIをモナディック表現(または他の慣用的なもの)に変換できますか?

コールバックベースのスタイルを使用してプロプライエタリバスに接続して通信するためのJavaAPIが提供されました。私は現在、概念実証アプリケーションをscalaに実装しており、もう少し慣用的なscalaインターフェイスを作成する方法を模索しています。

典型的な(簡略化された)アプリケーションは、Javaでは次のようになります。

Scalaでは、(T => Unit)からIListenerへの暗黙の変換を明らかに定義できます。これにより、物事が少し読みやすくなります。

これを見ると、scalazの約束とf#非同期ワークフローの両方を思い出しました。

私の質問はこれです:

これを理解のために、または同様に慣用的なものに変換できますか(これは俳優にもかなりうまくマッピングされるべきだと思います)

理想的には、次のようなものを見たいです。

0 投票する
4 に答える
6866 参照

ruby - Rubyで同等のモナド

Rubyではモナドの同等の構成は何でしょうか?

0 投票する
4 に答える
14155 参照

haskell - Haskellと乱数

私は数日Haskellをいじっていて、問題に遭遇しました。

整数のランダムリストを返すメソッドが必要です(Rand [[Int]])。

そこで、タイプを定義しました:type Rand a = StdGen -> (a, StdGen)。なんとかRand IO IntegerしてRand [IO Integer]( )制作できました。(returnR lst) :: StdGen -> ([IO Integer], StdGen)制作のヒントはありますRand [[Int]]か?

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

design-patterns - 野生のモナドトランスフォーマーに遭遇した人はいますか?

私のビジネス分野 (金融機関のバック オフィス IT) では、ソフトウェア コンポーネントがグローバルな構成を保持し、その進行状況をログに記録し、ある種のエラー処理や計算の短絡を行うことは非常に一般的です。 Haskell の Reader、Writer、Maybe モナドなどでうまくモデル化でき、モナド変換子と一緒に構成できます。

しかし、いくつかの欠点があるようです: モナド変換子の背後にある概念は非常にトリッキーで理解しにくく、モナド変換子は非常に複雑な型シグネチャにつながり、パフォーマンスにいくらかのペナルティを課します。

だから私は疑問に思っています:上記の一般的なタスクを扱うとき、モナド変換子はベストプラクティスですか?