Miranda modelled IO as a (lazy) function from [Char] -> [Char] … pretty unwieldy to use “raw”, but it was made controllable by a set of combinators that could be seen as a proto-monadic library.

Simon Y.


On 24 Oct 2016, at 15:50, Ronald Legere <rjljr2@gmail.com> wrote:

I must admit to some curiosity about this as well.  My recollection was that the original approach was to use lazy streams 
IO:: [request] -> [respose].  

This can be managed a bit better using continuations (Perhaps continuations can also be considered a separate approach?)

And now we have the IO Monad.  (which can be defined in terms of the stream based approach but is not implemented that way)

The only other approach I am aware of is Clean's "Unique types".  

Simon Thompson | Professor of Logic and Computation 
School of Computing | University of Kent | Canterbury, CT2 7NF, UK
s.j.thompson@kent.ac.uk | M +44 7986 085754 | W www.cs.kent.ac.uk/~sjt