> Ehm... what? How can you do such a replacement without losing, for
> example, functions like this:
> f (KI s h) i = snd $ h i $ fst $ h i s

Well, if we eliminate the existential from

   data Kl i o = forall s. Kl s (i ->  s ->  (s, o))

following strictly the procedure we obtain

        data S i o = S (i -> (S i o, o))

It is the data type of infinite streams, with an extra input. Your
function is obtaining the second element of the stream (assuming the
constant input i).  Infinite streams form a monad, as described in
great detail here:

        http://patternsinfp.wordpress.com/2010/12/31/stream-monad/


_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to