История изменений
Исправление
dave,
(текущая версия)
:
Теоретически return, while, if, match, try-catch, try-finally должно быть в ScalaZ. Хотя обычно хватает лишь map, flatMap и filter.
К слову, return - это специфика самого вычисления. Его не определить извне.
С while, for (обычный цикл) есть такой интересный нюанс. Их можно определить в общем виде, и такие определения подойдут для абсолютно любой монады, но для многих простых монад эти функции можно определить куда эффективнее, что позволяет делать F#. Try-функции, вообще, сложная вещь.
Так что, ScalaZ не подходит уже поэтому, не говоря о синтаксической поддержке, имитирующей то, как если бы эти конструкции применялись в «обычном» коде, иллюзию чего дает нам F#. Новички даже не всегда различают, где идет обычный код, а где монадические выражения.
Определенно, есть еще над чем поработать в Scala, но я боюсь, что этого никогда не добавят в язык. Поезд ушел. Кардинально менять язык уже поздно, да и далеко не всем нужны монады, хотя Future - довольно раскрученная вещь, и многие до сих пор пытаются приделать к Future удобный синтаксический сахар. Такая проблема была бы решена раз и навсегда, если бы были computation expressions по типу F#
Исходная версия
dave,
:
Теоретически return, while, if, match, try-catch, try-finally должно быть в ScalaZ. Хотя обычно хватает лишь map, flatMap и filter.
К слову, return - это специфика самого вычисления. Его не определить извне.
С while, for (обычный цикл), try-catch и try-finally есть такой интересный нюанс. Их можно определить в общем виде, и такие определения подойдут для абсолютно любой монады, но для многих простых монад эти функции можно определить куда эффективнее, что позволяет делать F#.
Так что, ScalaZ не подходит уже поэтому, не говоря о синтаксической поддержке, имитирующей то, как если бы эти конструкции применялись в «обычном» коде, иллюзию чего дает нам F#. Новички даже не всегда различают, где идет обычный код, а где монадические выражения.
Определенно, есть еще над чем поработать в Scala, но я боюсь, что этого никогда не добавят в язык. Поезд ушел. Кардинально менять язык уже поздно, да и далеко не всем нужны монады, хотя Future - довольно раскрученная вещь, и многие до сих пор пытаются приделать к Future удобный синтаксический сахар. Такая проблема была бы решена раз и навсегда, если бы были computation expressions по типу F#