Я читаю Haskell/Category theory и вот definition of monad из этой статьи:Являются ли все экземпляры Monad в Haskell разными способами для отображения из Hask в Hask?
Монада представляет собой особый тип функтора из категории к той же категории , который поддерживает некоторые дополнительные структуры. Итак, до определений. Монада есть функтор М: С-> С, наряду с двумя морфизмов для каждого объекта X в C:
единица измерения: Х -> М (Х)
присоединиться: М (M (X)) -> M (X)
Как я понимаю, в Haskell return
эквивалентно unit
. Но с return
я могу написать:
x :: [Int] -- x is a member of Lst category
x = return 5
и это правильный код в Haskell. Теперь, как вы можете видеть, 5
здесь не является членом Lst
, но return
работает на него.
Таким образом, я предполагаю, что Lst
не С из М: C-> C. Но кто же тогда?
Может быть, правильный ответ Hask
, но я не уверен, что «функтор из категории ее подкатегории» так же, как «функтор из категории к одной и той же категории».
Что такое '' Hask'? – Thilo
Это из «Haskell/Categry theory»: «Основная категория, о которой мы будем говорить в этой статье, - это Hask, который рассматривает типы Haskell как объекты и функции Haskell как морфизмы ...» – azaviruha
«M: C -> C' соответствует 'm' в' классе Monad m где ..', а 'C' - категория' Hask', но в контексте '..: C -> C',' C' относится к объекту 'C', который в этом случае является типом. Я полагаю, что «более правильно» написать «M: Obj (C) -> Obj (C)». – user2407038