This looks really beautiful: what's it written in?
Also, "Num in IO", nice. Now we wait for someone to write a "(Num in IO) in IO" action.
Also, "Num in IO", nice. Now we wait for someone to write a "(Num in IO) in IO" action.
I would recommend that you focus on good error messages that explain monad-related errors in "user land" and not force them to either guess about what's wrong or suddenly learn all the stuff under the hood. It's a terrible experience and you see it in C++ with incomprehensible template errors or any kind of transpiled language like ClojureScript that gives you errors from the underlying implementation.