Понимание Монада - PullRequest
       27

Понимание Монада

0 голосов
/ 10 ноября 2019

Вопрос

Пожалуйста, помогите подтвердить или исправить понимание того, что такое Монада и ее черты.

Как Тип данных

В моем понимании, Монада это:

  1. контейнер, который может вместить любой тип T и
  2. обеспечивает интерфейс bind , который позволяет его клиенту применять функцию плоской карты и
  3. проецирует свое содержимое в другую монаду любого типа T '.

Для создания монады типа T необходим интерфейс return или unit .

unit:= T -> M[T]

enter image description here

В 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 из коробки?

Ссылки

...