У обозначений и монад состав

Я новичок в Haskell, и я все еще изучаю теорию категорий и ее практическое использование в информатике.

Я провел последний день, наблюдая за парой лекций из университета Беркли о теории категорий, большая часть которых содержала математическое представление о кольцах, полугруппах, группах, магмах, моноидах и т. Д.

Поэтому у меня возникли вопросы о монадической композиции и категории kleisli. Поэтому я хотел бы задать вопросы Haskell / специалистам по теории категорий.

Является ли нотация композицией монад?

С Уважением,

Пабло Парада

2 ответа

Решение

У обозначений просто синтаксический сахар для >>=, Код такой как

do x <- a
   b  -- b is an expression possibly involving x

обескуражен

a >>= \x -> b

Если вы изучаете монады в КТ, вы, вероятно, обнаружите, что они определяются как функторы с двумя естественными преобразованиями.

unit :: a -> m a        -- also known as η
join :: m (m a) -> m a  -- also known as μ

в то время как Хаскелл определяет

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,

Является ли нотация композицией монад?

В нотации do нет ничего особенного. Это просто синтаксический сахар над функциями монады. Хороший пример из Haskell wikibook:

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

De-сахара для:

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

В книге о реальном мире хаскелла есть хороший раздел, объясняющий, как происходит это удаление сахара в различных сценариях.

Другие вопросы по тегам