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

state - MonadStateが取得して配置する理由は?

Real World Haskellのモナドの章(第14章)を読んでいます。関数は次のように定義されます。

ここでget関数とput関数の目的がよくわかりません。同じことをしているようで、より簡潔な関数を次のように書き直しました。

だから私の質問は:一般的にgetとputの目的は何ですか?

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

scala - Scalaにおける高階多型の一般的な方法

モナドを記述する非常に基本的なインターフェースを実装することで、scalaの高階ポリモフィズムを把握しようとしていますが、実際には理解できない問題に遭遇します。

私はC++で同じことを実装し、コードは次のようになります。

Scalaで同じことをしようとすると、失敗します。

コンパイラは次のことについて文句を言います。

私はここで何が間違っているのですか?私がscalaタイプコンストラクターについて理解していないように見える基本的な概念があるようです。

よろしく、raichoo

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

haskell - このEither-monadコードがタイプチェックを行わないのはなぜですか?

'baby.hs'のこのコードフラグメントは、ひどいコンパイルエラーを引き起こしました:


なぜこれが起こるのですか?そして、どうすればこのコードをコンパイルできますか?助けてくれてありがとう〜

分かりました。そして私はそれがコンパイルされるのを見るためにコードを調整しました:

正常にコンパイルされます!しかし...さらに質問があります:

'どちらか'をモナドにし、' return =Right'を取得しました...どうすれば'return= Left'を取得できますか?私はこれを試しましたが失敗しました:

または:インスタンスモナド(\ x->いずれかのxa)

まったくコンパイルされません!

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#非同期ワークフローの両方を思い出しました。

私の質問はこれです:

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

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