私はHaskell/Category theoryを読み、ここにその記事からdefinition of monadですよ:HaskellのすべてのMonadインスタンスは、HaskからHaskへのマッピング方法が異なりますか?
モナドは、いくつかの追加の構造をサポートし、同じ カテゴリに分類から、ファンクタの特殊なタイプです。したがって、 の定義に至ります。
が単位:C内のすべてオブジェクトXのための2つの 射とともに、C-> C:モナドはファンクタMであり、X - > M(X)
参加:M (M(X))→M(X)
私が理解しているように、Haskell return
はunit
に相当します。
x :: [Int] -- x is a member of Lst category
x = return 5
を、これはHaskellのに有効なコードです。しかし、return
で、私は書くことができます。 ご覧のとおり、5
はLst
のメンバーではありませんが、return
のメンバーです。
だから、私はLst
はM からСではないことを推測する:C-> C。しかし誰ですか?
はたぶん正しい答えはHask
ですが、私は「そのサブカテゴリのカテゴリからファンクタは」「同じカテゴリのカテゴリからファンクタ」と同じであることはよく分かりません。
「ハスク」とは何ですか? – Thilo
"Haskell/Categry theory"から: "この記事では、Haskell型をオブジェクトとして扱い、Haskellは型として機能するHaskleが主なカテゴリーです" – azaviruha
'M:C - > Cは 'class Monad m where ..'の 'm 'に対応し、' C'は 'Hask'のカテゴリであるが、' ..:C - > C'では 'C'はオブジェクトこの場合はタイプです。 'M:Obj(C) - > Obj(C)'と書くのはもっと正しいと思います。 – user2407038