У обозначений и монад состав
Я новичок в 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
В книге о реальном мире хаскелла есть хороший раздел, объясняющий, как происходит это удаление сахара в различных сценариях.