私は Haskell の初心者で、圏論とコンピューター サイエンスにおけるその実用的な使い方についてまだ学んでいます。
私は先日、バークレー大学の圏論に関するいくつかの講義を見て過ごしました。その内容のほとんどは、環、半群、群、マグマ、モノイドなどの数学的見解を示していました。
したがって、モナド構成と kleisli カテゴリについて私の心に疑問が生じました。したがって、Haskell/圏論の専門家に質問したいと思います。
do記法は一種のモナド合成ですか?
よろしく、
パブロ・パラダ
私は Haskell の初心者で、圏論とコンピューター サイエンスにおけるその実用的な使い方についてまだ学んでいます。
私は先日、バークレー大学の圏論に関するいくつかの講義を見て過ごしました。その内容のほとんどは、環、半群、群、マグマ、モノイドなどの数学的見解を示していました。
したがって、モナド構成と kleisli カテゴリについて私の心に疑問が生じました。したがって、Haskell/圏論の専門家に質問したいと思います。
do記法は一種のモナド合成ですか?
よろしく、
パブロ・パラダ
do記法は一種のモナド合成ですか?
do 表記について特別なことは何もありません。これは、モナド関数に対する単なる構文糖衣です。Haskell wikibook の良い例:
do x1 <- action1
x2 <- action2
action3 x1 x2
脱糖:
action1
>>=
\ x1 -> action2
>>=
\ x2 -> action3 x1 x2
実際の haskell book には、さまざまなシナリオでこの脱糖がどのように行われるかを説明する素晴らしいセクションがあります。
do 表記は、 の単なる構文糖衣です>>=。次のようなコード
do x <- a
b -- b is an expression possibly involving x
脱糖される
a >>= \x -> b
CT でモナドを研究している場合、モナドが 2 つの自然な変換を持つファンクターとして定義されていることに気付くでしょう。
unit :: a -> m a -- also known as η
join :: m (m a) -> m a -- also known as μ
Haskell が定義している間
return :: a -> m a
(>>=) :: m a -> (a -> m b) -> m b
どちらのプレゼンテーションも同等です。確かに、unitとreturnはまったく同じものです。代わりに、次joinのように表現できます。(>>=)
join x = x >>= id
逆もまた同様で、(>>=)で表すことができますjoin。
x >>= f = join (fmap f x)
fmap上記はa -> m bとm aを返すことm (m b)に注意してm bくださいjoin。