[Haskell-cafe] Typing with co/contra-variance.
Luke Palmer
lrpalmer at gmail.com
Thu Apr 3 13:41:54 EDT 2008
On Thu, Apr 3, 2008 at 9:58 AM, Ben Lippmeier <Ben.Lippmeier at anu.edu.au> wrote:
> Hi all,
> I have some quick questions for the type theory people:
>
> If I write an expression:
> (if .. then 23 else "Erk")
>
> In Haskell this would be an error, but perhaps I can assign it the type
> 'Top' (or 'Any') and then use reflection ala Data.Dynamic to inspect the
> type of this object at runtime and cast it back to something useful...
>
>
> But if I write:
>
> isEven "Erk"
>
> where
> isEven :: Int -> Bool
> isEven i
> = case i of
> 1 -> False
> 2 -> True
> ...
>
> Then this would be a genuine type error, because the case-expression
> demands an actual Int at runtime.
>
>
> Questions:
> 1) Could I perhaps wave my arms around and say something about the Int in
> the type of isEven being in a contra-variant position? Is this what is
> actually happening?, and can someone point me to a good paper?
This is related to "gradual typing". I don't know how much work has
been done into inference for gradual typing, but I'll bet you could
hack on the HM algorithm a little and get something usable.
Here's a relevant paper:
http://www.cs.colorado.edu/~siek/pubs/pubs/2006/siek06:_gradual.pdf
Enjoy.
Luke
More information about the Haskell-Cafe
mailing list