2人の違いを簡単に説明できますか?私は、モナドがエンドフュンターである部分と、単にファンクターである部分を完全に理解していません。ファンクタと院内医の違い
37
A
答えて
50
ファンクタはあるカテゴリから別のカテゴリに進むことができます。エンドファンクタは、開始カテゴリとターゲットカテゴリが同じであるファンクタです。
内部形態対モーフィズムと同じです。
なぜ、モナドは内視鏡医でなければならないのですか?
「モナドは、エンドフュンターのカテゴリーで単なるモナドです」という有名な引用があります。幸いにも、他の誰かがすでにそれをかなりよく説明していますin this answer。
なぜ、モナドが内語辞典でなければならないかという重要なポイントは、ホースケルで呼ばれるようにjoin
、またはµ
です。通常、カテゴリ理論で呼ばれているように、モナドの定義¹の一部です。今
Prelude Control.Monad> :t join
join :: Monad m => m (m a) -> m a
ようにオブジェクトにファンクタm
を適用した結果は、(Haskに、射などのオブジェクトや関数としてHaskellの種類のカテゴリ、タイプ)m
が再び適用できることオブジェクトでなければなりません。つまり、ファンクタm
のドメインであるカテゴリに属している必要があります。
functorは、そのドメインとcodomainが同じであれば(厳密には、そのcodomainがそのドメインのサブカテゴリである場合)、つまりエンドofunctorである場合にのみ作成できます。モナドとのコンポジタビリティはモナドの定義の一部であるため、モナドはフォルディオリファイヤーです。
1一方の定義では、(>>=)
またはbind
を使用してモナドを定義し、派生プロパティとしてjoin
を指定することもできます。
関連する問題
エンドヒューマンではない、ハスケルのファンクタはありますか? (彼らはすべてHaskをHaskにマップしないのですか?) – huon
Haskellのすべてのファンは、endoです。 –
非内科医は、http://hackage.haskell.org/packages/archive/categories/1.0/doc/html/Control-Categorical-Functor.html – sdcvvc