Вопрос
Пожалуйста, помогите подтвердить или исправить понимание того, что такое Монада и ее черты.
Как Тип данных
В моем понимании, Монада это:
- контейнер, который может вместить любой тип T и
- обеспечивает интерфейс bind , который позволяет его клиенту применять функцию плоской карты и
- проецирует свое содержимое в другую монаду любого типа T '.
Для создания монады типа T необходим интерфейс return или unit .
unit:= T -> M[T]
В Scala List () или Set () являются примерами интерфейса return и любого ScalaТипы последовательностей (Array, List, Map, String) - это Monad, которые предоставляют flatMap интерфейс, который является bind .
Являются ли они правильными?
КакШаблон проектирования
Разработка программного обеспечения предоставляет способы управления сложностью или структурирования программного обеспечения, например структурированного программирования безo, преобразование конвейера в UNIX, объектно-ориентированное инкапсулирование данных и управление доступом и т. д.
Является ли Monad шаблоном проектирования, обеспечивающим способ структурирования вычислений в виде цепочки?
В других системах
Команды UNIX
Полагаю, что команды UNIX, например, cat, grep, являются функциями, которые можно объединить в цепочку, но это не означает, что они являются монадой, и они не являются монадой, потому что у них нет return / unit , ни они не являются типом данных. Или все еще рассматривается, например, IO Monad как в Monadic ввода / вывода и программировании оболочки UNIX ?
Python
Я считаю, что bind или Scala FlatMap эквивалент в Python из коробки. Могу ли я сказать, что в Python нет функции Monad из коробки?
Ссылки