[Haskell-cafe] Eta-expansion and existentials (or: types destroy my laziness)

Henning Thielemann schlepptop at henning-thielemann.de
Sun Oct 24 12:43:48 EDT 2010


Max Bolingbroke schrieb:

> Let's start with a simple example of an existential data type:
> 
>> data Stream a = forall s. Stream s (s -> Maybe (a, s))

I use quite the same data type for my signal processing applications:
  http://code.haskell.org/synthesizer/core/src/Synthesizer/State/Signal.hs

You may be interested in my overview:
http://hackage.haskell.org/packages/archive/synthesizer/0.2.0.1/doc/html/Synthesizer-Storage.html

> Now we may wish to define infinite streams using value recursion:
> 
>> ones :: Stream Int
>> ones = cons 1 ones

For me a Stream is a List without storage, thus in your example you
cannot share the content of 'ones'. The internal state type becomes
larger and larger for every new element (every element adds a new layer
of Maybe, if I'm not mistaken).

In cases, where I want this kind of recursion I store the content
generated by a Stream in a list or another more efficient stream type or
I write special functions for this purpose (e.g., 'repeat' in the case
of 'ones').




More information about the Haskell-Cafe mailing list