[Haskell-cafe] How to convert a list to a vector encoding its
length in its type?
Martijn van Steenbergen
martijn at van.steenbergen.nl
Tue Aug 25 14:45:42 EDT 2009
David Menendez wrote:
> data SomeNat where SomeNat :: (Nat n) => n -> SomeNat
> toPeano :: Int -> SomeNat
>
> or, equivalently, by using a higher-order function.
>
> toPeano :: Int -> (forall n. Nat n => n -> t) -> t
Nice! I thought the only way to create them was with a new datatype,
but this works too. I guess the nontrivial bit to think of is the
introduction of a fresh type (t in this case). Thanks for this insight!
Martijn.
More information about the Haskell-Cafe
mailing list