[Haskell-cafe] Existential question

oleg at okmij.org oleg at okmij.org
Thu Aug 25 09:18:17 CEST 2011


> 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/




More information about the Haskell-Cafe mailing list