4

私は Haskell の初心者で、圏論とコンピューター サイエンスにおけるその実用的な使い方についてまだ学んでいます。

私は先日、バークレー大学の圏論に関するいくつかの講義を見て過ごしました。その内容のほとんどは、環、半群、群、マグマ、モノイドなどの数学的見解を示していました。

したがって、モナド構成と kleisli カテゴリについて私の心に疑問が生じました。したがって、Haskell/圏論の専門家に質問したいと思います。

do記法は一種のモナド合成ですか?

よろしく、

パブロ・パラダ

4

2 に答える 2

10

do記法は一種のモナド合成ですか?

do 表記について特別なことは何もありません。これは、モナド関数に対する単なる構文糖衣です。Haskell wikibook の良い例:

do x1 <- action1
   x2 <- action2
   action3 x1 x2

脱糖:

action1
  >>=
    \ x1 -> action2
      >>=
        \ x2 -> action3 x1 x2

実際の haskell book には、さまざまなシナリオでこの脱糖がどのように行われるかを説明する素晴らしいセクションがあります。

于 2015-03-01T23:38:02.043 に答える
4

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

どちらのプレゼンテーションも同等です。確かに、unitreturnはまったく同じものです。代わりに、次joinのように表現できます。(>>=)

join x = x >>= id

逆もまた同様で、(>>=)で表すことができますjoin

x >>= f = join (fmap f x)

fmap上記はa -> m bm aを返すことm (m b)に注意してm bくださいjoin

于 2015-03-02T09:07:13.583 に答える