Side-discussion: free monads are still monads. And from what I get, free monads are not really that different from programming against a MonadFoo m constraint, in the sense that you can give different implementations at the call site for MonadFoo, while with the free monad you can have different interpreters.
No no, sorry, I didn't want to suggest that. I just replied on this paragraph:
I would personally argue that monads are not a good way to represent effects, but they are the current standard for generic functionally pure programming languages. Some other interesting ways of representing effects include uniqueness types and free monads.
I would say the simpler monad tutorials are, the better :)
Side-discussion: free monads are still monads. And from what I get, free monads are not really that different from programming against a
MonadFoo m
constraint, in the sense that you can give different implementations at the call site forMonadFoo
, while with the free monad you can have different interpreters.You're right, I should have said there are other ways to represent effects than using one single IO monad for everything.
No no, sorry, I didn't want to suggest that. I just replied on this paragraph:
I would say the simpler monad tutorials are, the better :)
I know, emphasis on one monad rather than monads ;-)