
Excerpts from Jacek Generowicz's message of Fri Dec 17 20:17:30 -0500 2010:
Imagine an activity which may be performed either by a computer, or by a human (alternatively, either locally, or remotely across a network). From Haskell's type system's perspective, these two will look completely different (most obviously, the human (or the network) is wrapped in IO). How can they be made interchangeable ?
This particular example can be resolved from lifting the pure, computer computation into IO. One way of abstracting this interaction is to use the Prompt monad. [1] This doesn't work in general, and indeed types do have the unfortunate property of reducing modularity. This is especially evident when you work with dat structures that have their invariants encoded in the type system. [2] Or maybe this is a good thing, since you don't want IO leaking into your test suite without you knowing about it... [1] http://web.mit.edu/~ezyang/Public/threemonads.pdf [2] http://www.cis.upenn.edu/~bcpierce/papers/harmful-mfps.pdf