タグ付けされた質問 「monads」

プログラミングのモナドは、合成可能な計算の記述です。モナドは、Haskellのような関数型プログラミング言語の重要な構成要素です。

30
モナドとは何ですか?
最近Haskellを手短に見てきたが、モナドが本質的に何であるかに関して、簡潔で簡潔で実用的な説明は何だろうか? 私が遭遇したほとんどの説明は、かなりアクセスしにくく、実用的な詳細に欠けていることがわかりました。

19
分かりやすい英語のモナド?(FPのバックグラウンドがないOOPプログラマー向け)
OOPプログラマーが(関数型プログラミングのバックグラウンドなしで)理解できるという点で、モナドとは何ですか? それはどのような問題を解決し、それが使用される最も一般的な場所は何ですか? 編集: 私が探していた理解の種類を明確にするために、モナドを持つFPアプリケーションをOOPアプリケーションに変換するとします。モナドの責任をOOPアプリに移植するにはどうしますか?

6
モナドはエンドファンクターのカテゴリーの単なるモノイドですが、何が問題なのですか?
誰が最初に次のことを言ったのですか? モナドはエンドファンクターのカテゴリーの単なるモノイドですが、何が問題なのですか? そして、それほど重要ではないメモで、これは本当ですか?もしそうなら、説明を提供できますか(願わくば、Haskellの経験があまりない人でも理解できると思います)。

8
Haskellの大規模デザイン?[閉まっている]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 3年前休業。 ロックされています。質問はトピックから外れていますが、歴史的に重要であるため、この質問とその回答はロックされています。現在、新しい回答や相互作用を受け入れていません。 特にHaskellで、大規模な関数型プログラムを設計/構造化する良い方法は何ですか? 私はたくさんのチュートリアルを行ってきました(Write Yourself a Schemeが私のお気に入りで、Real World Haskellがすぐ近くにあります)-ほとんどのプログラムは比較的小さく、単一目的です。さらに、それらのいくつかは特にエレガントであるとは見なしません(たとえば、WYASの膨大なルックアップテーブル)。 私は今、より多くの可動部分を備えたより大きなプログラムを書きたいと思っています-さまざまなソースからのデータの取得、クリーニング、さまざまな方法での処理、ユーザーインターフェイスでの表示、永続化、ネットワーク経由の通信など。このようなコードを読みやすく、保守しやすく、変化する要件に適応できるようにするための最良の構造はどれですか。 大規模なオブジェクト指向の命令型プログラムに関するこれらの質問に対処する非常に多くの文献があります。MVCやデザインパターンなどのアイデアは、OOスタイルでの関心の分離や再利用性などの幅広い目標を実現するための適切な処方箋です。さらに、新しい命令型言語は「成長するにつれて設計する」スタイルのリファクタリングに役立ちますが、私の初心者の意見では、Haskellはあまり適していないようです。 Haskellに相当する文献はありますか?エキゾチックな制御構造の動物園は、この目的のために関数型プログラミング(モナド、矢印、アプリケーションなど)でどのように利用するのが最適ですか?おすすめのベストプラクティスは何ですか。 ありがとう! 編集(これはドン・スチュワートの回答のフォローアップです): @donsは言及しました:「モナドはタイプで主要な建築デザインをキャプチャします。」 私の質問は、純粋な関数型言語での主要なアーキテクチャ設計についてどのように考えればよいのでしょうか。 いくつかのデータストリームといくつかの処理ステップの例を考えてみましょう。データストリームのモジュラーパーサーを一連のデータ構造に書き込むことができ、各処理ステップを純粋な関数として実装できます。1つのデータに必要な処理手順は、その値や他のデータによって異なります。一部の手順の後には、GUIの更新やデータベースクエリなどの副作用が伴う必要があります。 データと解析ステップを適切に結び付ける「正しい」方法は何ですか?さまざまなデータ型に対して正しいことを行う大きな関数を書くことができます。または、モナドを使用して、これまでに処理されたものを追跡し、各処理ステップでモナドの状態から次に必要なものをすべて取得することもできます。または、大部分が別個のプログラムを作成してメッセージを送信することもできます(このオプションはあまり好きではありません)。 彼がリンクしたスライドには、「デザインを型/関数/クラス/モナドにマッピングするためのイディオム」という箇条書きが必要です。イディオムとは何ですか?:)

1
Scalazが反復する:「大きい」モナドの「IterateeT」に一致するように「列挙」Tを「持ち上げる」
EnumeratorTと対応するものがあれば、IterateeT一緒に実行できます: val en: EnumeratorT[String, Task] = EnumeratorT.enumList(List("a", "b", "c")) val it: IterateeT[String, Task, Int] = IterateeT.length (it &= en).run : Task[Int] 列挙モナドがiterateeモナドよりも「大きい」場合、私は一致するようにiterateeを使用するupか、より一般的にHoistは「持ち上げ」ます。 val en: EnumeratorT[String, Task] = ... val it: IterateeT[String, Id, Int] = ... val liftedIt = IterateeT.IterateeTMonadTrans[String].hoist( implicitly[Task |>=| Id]).apply(it) (liftedIt &= en).run: Task[Int] しかし、iterateeモナドが列挙子モナドよりも「大きい」場合、どうすればよいでしょうか。 val en: EnumeratorT[String, …

6
無料のモナドとは何ですか?
私が見てきた用語無料モナドがポップアップし、すべての 今 と 、その後いくつかの時間のために、誰もがちょうど彼らが何であるかの説明を与えることなく、それらを議論/使用するようです。だから:無料のモナドは何ですか?(私はモナドとHaskellの基本に精通していると思いますが、カテゴリー理論については非常に大まかな知識しか持っていません。)

7
なぜモナドが必要なのですか?
私の控えめな意見では、「モナドとは何ですか?」という有名な質問に対する答えです。、特に最も投票されたものは、モナドが本当に必要な理由を明確に説明せずに、モナドとは何かを説明しようとします。問題の解決策として説明できますか?
366 haskell  monads 

5
Functor / Functor / Applicative / Monadの良い例は?
型クラスXが何であるかを誰かに説明しながら、正確にXであるデータ構造の良い例を見つけるのに苦労しています。 だから、私は次の例を要求します: Functorではない型コンストラクター。 Functorであるが、Applicativeではない型コンストラクター。 Applicativeですがモナドではない型コンストラクタです。 モナドである型コンストラクタ。 どこにでもモナドの例はたくさんあると思いますが、前の例とある程度の関係があるモナドの良い例は、絵を完成させることができます。 特定の型クラスに属するために重要な点のみが異なる、互いに類似する例を探します。 アローの例をこの階層のどこかに忍び込むことができたなら(それはApplicativeとMonadの間ですか?)、それも素晴らしいでしょう!

6
C#では、モナドとは何ですか?
最近、モナドについて多くの話題があります。私はいくつかの記事/ブログの投稿を読みましたが、コンセプトを完全に理解するのに十分なほど例を挙げられません。その理由は、モナドは関数型言語の概念であり、したがって、例は私が使用していない言語に含まれているためです(関数型言語をあまり使用していないため)。記事を完全に理解するのに十分なほど構文を理解することはできません... ただし、ラムダ式やその他の関数型機能を含め、C#についてはよく知っています。C#には機能的な機能のサブセットしかないため、モナドをC#で表現できない可能性があります。 しかし、確かにコンセプトを伝えることは可能でしょうか?少なくとも私はそう願っています。おそらく、C#の例を基礎として提示し、C#開発者がそこから実行できることを望むが、言語には関数型プログラミング機能が不足しているために説明できないかもしれません。モナドの意図と利点を伝えるため、これは素晴らしいことです。だから私の質問です:モナドをC#3開発者に与えることができる最良の説明は何ですか? ありがとう! (編集:ちなみに、SOには既に「モナドとは何か」という質問が少なくとも3つあることは知っています。しかし、私はそれらについて同じ問題に直面しています...したがって、C#開発者のため、この質問はimoに必要ですフォーカス。ありがとう。)
189 c#  c#-3.0  lambda  monads 


3
リーダーモナドの目的は何ですか?
読者モナドはとても複雑で役に立たないようです。JavaやC ++のような命令型言語では、私が誤解しない限り、リーダーモナドには同等の概念はありません。 簡単な例を挙げて、これを少し明確にしていただけますか?

16
ネストされたtry catchブロックを回避するパターン?
計算を実行する方法が3つ(またはそれ以上)あり、それぞれ例外が発生して失敗する状況を考えてみます。成功するものが見つかるまで各計算を試行するために、私は次のことを行っています: double val; try { val = calc1(); } catch (Calc1Exception e1) { try { val = calc2(); } catch (Calc2Exception e2) { try { val = calc3(); } catch (Calc3Exception e3) { throw new NoCalcsWorkedException(); } } } これをより良い方法で実現する受け入れられたパターンはありますか?もちろん、失敗したときにnullを返すヘルパーメソッドで各計算をラップし、??演算子を使用することもできますが、これをより一般的に行う方法があります(つまり、使用する各メソッドのヘルパーメソッドを記述する必要はありません) )?私は、特定のメソッドをtry / catchでラップし、失敗するとnullを返すジェネリックスを使用して静的メソッドを作成することを考えましたが、どうすればよいかわかりません。何か案は?


5
機能的なデザインパターン[終了]
閉まっている。この質問はスタックオーバーフローのガイドラインを満たしていません。現在、回答を受け付けていません。 この質問を改善してみませんか?Stack Overflowのトピックとなるように質問を更新します。 4年前休業。 この質問を改善する モナド、アプリケーション、矢印など、機能的なイディオムはたくさんあります。それらはさまざまな記事に記載されていますが、残念ながら、それらが1か所にまとめられている本や記事はありません(Typeclassopediaがありますが、たくさんあります十分にカバーされていない領域の)。誰かが1か所で十分にカバーし、FPの中間スキルを持つプログラマーがアクセスできる記事/本を推薦できますか?


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.