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

Bas van Dijk v.dijk.bas at gmail.com
Fri Aug 21 14:55:41 EDT 2009


On Fri, Aug 21, 2009 at 8:50 PM, Jason Dagit<dagit at codersbase.com> wrote:
>>>    toPeano :: Int -> (forall n. Nat n => n -> t) -> t
>
> This looks a bit more promising.  For those unfamiliar with this form,
> it is the logical "negation" of the previous type.  One description is
> here [1], where it is mentioned that the type of t cannot depend on n.
>  So you could not for example, return Vector a n or do, "toPeano 5
> id".
>
> I guess you end up writing your program inside out in a sense which is
> fine, but then how do you address the forgetfulness?  Everything has
> to be inside one scope where you never wrap things in an existential
> type?  Perhaps via the negated existential encoding your last version
> of toPeano?  I have a hard time wrapping my head around it at this
> point.

I got out of the scope using unsafeCoerce. I think its safe because I
know my levmarML function is correct. However I can't express that in
the type.

Bas


More information about the Haskell-Cafe mailing list