Вопрос глубокоуважаемым хаскелерам. Язык Haskell знаю на 4-, монаду написать могу, в сообществе не участвую. Пишу статью о реализации функциональных метафор на процедурном языке(статья не холиварная, на habr, язык реализации - Go который знаю хорошо если это важно). Конструирую монаду. Что будет одобрено адептами как монада, а не дешевый фейк? Формальные признаки есть?
У монады есть четкое определение. Все что выполняет требования этого определения будет честной не фейковой монадой. Классически всегда делают для демонстрации Maybe, да, ибо выгоды её использования видны и понятны не ФПшникам. И вот с этой точки зрения встает вопрос в разумности этого действия: реализовать монады то совсем не сложно на Go, но будут ли они действительно удобными инструментами в Go?...решение каких конкретно задач и проблем они упростят (или дадут альтернативу) в Go и упростят ли вообще? Мне кажется, учитывая топорность языка, не получится ничего лучше и приятнее идиоматичного кода =/ Если же все это "just for fun" и "потому что мы можем", то почему бы и нет)
Так как на Maybe Вы явно не нацелены, со своей стороны посоветую Вам монаду List отсюда: kolesnichenkods.github.io/2015/08/01/%D0%9C%D0%BE%...
uvelichitel: угу, если быть формально точным, то вот это: hackage.haskell.org/package/base-4.8.1.0/docs/Prel...
По поводу ответа, давайте обождем немного, возможно метры ещё подтянутся и расскажут чего интересного и полезного, потому что я Haskell только изучаю, более того, до фундаментального и глубокого изучения монад ещё и не дошел толком то....собственно потому и коммент написал, а не ответ.
uvelichitel: да практически любая неконстантная функция это блок do. Просто main - пример того, что используют все, но никто не знает что это такое в терминах ФП и теории категорий.
Как полезный и классический пример - Maybe. Наглядно покажет, что есть жизнь без return -1;
А вообще адепты не оценят. Без паттерн матчинга реализация будет не такой лаконичной. Императивщики не оценят, а функциональщики уже и так всё знают и видели.
Maybe легко написать на Go, там функция может возвращать несколько параметров 'func(args...) res, Ok' или 'func(res...) res, err' Но ведь адепты скажут fake