когда использовать при рассахаривании аппликатив, а когда монаду? IO же тоже аппликатив, но там порядок важен.
Ну так оно полагается на то, что порядок в аппликативе совпадает с монадическим, если реализовано и то и другое. Поэтому разницы и не будет. И расширение включать для ApplicativeDo надо
Applicative do-notation desugaring preserves the original semantics, provided that the Applicative instance satisfies <*> = ap and pure = return (these are true of all the common monadic types). Thus, you can normally turn on ApplicativeDo without fear of breaking your program.
А можно ли как-то скрыть инстанс Monad IO и посмотреть что будет?
Чтобы проверить порядок? Ты же можешь просто написать, например main = (\a b -> ()) <$> putStrLn "hello" <*> putStrLn "world"
Вот прямо сейчас балуюсь. Порядок слева направо.
Обсуждают сегодня