::
on the next line. We've also reverted to using tuple-style constraints, because in practive they making distinguishing between the constraints and argument types.do
-notation and normal notations.MonadIO
IO
functions to MonadIO
. This prevents you from needing to generalize the function at the call site, while still able to use it in IO
contexts.