The `Exists`

type, for encoding existential types.

```
spago install exists
```

The type `Exists f`

is isomorphic to the existential type `exists a. f a`

.

For example, consider the type `exists s. Tuple s (s -> Tuple s a)`

which represents infinite streams of elements of type `a`

.

This type can be constructed by creating a type constructor `StreamF`

as follows:

`data StreamF a s = StreamF s (s -> Tuple s a)`

We can then define the type of streams using `Exists`

:

`type Stream a = Exists (StreamF a)`

The `mkExists`

and `runExists`

functions then enable packing and unpacking of `SteamF`

into/out of `Stream`

.

Module documentation is published on Pursuit.