[Haskell-cafe] Re: How to convert a list to a vector encoding its length in its type?

John Lato jwlato at gmail.com
Fri Aug 21 18:57:14 EDT 2009

> From: David Menendez <dave at zednenem.com>
> or, equivalently, by using a higher-order function.
>    toPeano :: Int -> (forall n. Nat n => n -> t) -> t

Incidentally, this is the approach used in the type-level library [1],
which provides the function:

  reifyIntegral :: Integral i => i -> (forall n. Nat n => n -> r) -> r

The docs describe this as "In CPS style (best possible solution),"
although I didn't see any reference for that assertion.

Bas, if you'd like some examples, the ForSyDe project [2] has a
tutorial on using type-level vectors, which I found helpful when faced
with the same problem recently [3], [4].

John Lato

[1] http://hackage.haskell.org/package/type-level
[2] http://www.ict.kth.se/forsyde/files/tutorial/apa.html
[3] http://inmachina.net/~jwlato/haskell/iter-audio/src/Sound/Iteratee/Channelized.hs
[4] http://inmachina.net/~jwlato/haskell/iter-audio/examples/channelized_reader.hs

More information about the Haskell-Cafe mailing list