AK
fail
Size: a a a
AK
fail
AW
fmap
) и определить, как с вашей структурой данных будет работать функция traverse
или функция sequenceA
. fmap
и traverse
или sequenceA
: https://hackage.haskell.org/package/base-4.10.0.0/docs/Data-Traversable.htmlВл
fail
AK
AK
Вл
AK
fmap
) и определить, как с вашей структурой данных будет работать функция traverse
или функция sequenceA
. fmap
и traverse
или sequenceA
: https://hackage.haskell.org/package/base-4.10.0.0/docs/Data-Traversable.htmlAP
AW
AP
Вл
ZK
ZK
AW
AW
andThen
? Вот она и есть монада - ни больше, ни меньше. Если где-то в цепочке тасков произойдёт ошибка, то вся цепочка завешится ошибкой. Если же нигде в цепочке ошибок не будет, то все функции отработают каждая друг за другом и каждая следующая, используя результат предыдущей - и мы получим в конце цепочки конечный результат. andThen
в Elm'е определена только для встроенных типов. А в Хаскелле вы можете определить ее для любого своего типа. Но суть её будет той же самой: если результат вычислений идёт в одну ветку (имеет тип Ok
, например) - то передавай его в следующую функцию. А если результат вычислений идёт в другую ветку (имеет тип Err
, например) - делай с ним что-то другое (что именно - определяете вы) и не продолжай цепочку вычислений.Вл
andThen
? Вот она и есть монада - ни больше, ни меньше. Если где-то в цепочке тасков произойдёт ошибка, то вся цепочка завешится ошибкой. Если же нигде в цепочке ошибок не будет, то все функции отработают каждая друг за другом и каждая следующая, используя результат предыдущей - и мы получим в конце цепочки конечный результат. andThen
в Elm'е определена только для встроенных типов. А в Хаскелле вы можете определить ее для любого своего типа. Но суть её будет той же самой: если результат вычислений идёт в одну ветку (имеет тип Ok
, например) - то передавай его в следующую функцию. А если результат вычислений идёт в другую ветку (имеет тип Err
, например) - делай с ним что-то другое (что именно - определяете вы) и не продолжай цепочку вычислений.AK
<$>
/<*>
которые нарушают флоу чтения кода. Для пользовательских "монад" сделаны команды/мессаджи, чтобы все сайд-эффекты крутились в одном цикле update
NK
{pure, andThen}
как явный параметр. Выглядеть будет так себе, но зато ты сможешь сделать sequence.Вл
AW
<$>
/<*>
которые нарушают флоу чтения кода. Для пользовательских "монад" сделаны команды/мессаджи, чтобы все сайд-эффекты крутились в одном цикле update
andThen
написано >>=
- что, разве это сильно усложняет? Сделай себе алиас в Хаскелле andThen = (>>=)
и используй себе andThen
. <-
? Ну так он просто распаковывает упакованное в обёртку значение. Если у нас result = Ok 4
, то value <- result
вытащит четвёрку из result
и value
будет иметь значение 4
. Если result = Just "something"
, то value <- result
присвоит переменной value
значение "something"
. Но если result
будет Err error
или Nothing
, то из-за того, что мы определили наши типы представителями класса монад, то дальнейшее вычисление прервется и нам не надо писать всяких if result ... then ... else
и case result of
для того, чтобы обработать эти случаи. Удобно же!