[Ur] Pattern Matching
Adam Chlipala
adamc at csail.mit.edu
Wed May 29 10:00:02 EDT 2013
Ur type inference is defined never to deduce the presence of
polymorphism. Rather, polymorphism is always declared explicitly.
In contrast to, say, ML, type inference in Ur is undecidable, hence the
requirement that the program give more annotations.
On 05/29/2013 09:57 AM, David Snider wrote:
> Let's say I rewrite that as:
>
> fun zip a b =
> case (a, b) of
> (a :: as, b :: bs) => (a, b) :: zip as bs
> | _ => []
>
> This throws a unification failure until I write:
>
> fun blah () = (zip (1::[]) (2::[]))
>
> At which point the compiler is able to infer the types and all
> compiles correctly
>
> Is there some reason that the compiler can't/shouldn't default to:
>
> fun zip [t] [t2] (a : list t) (b : list t2) : list (t * t2) =
> case (a, b) of
> (a :: as, b :: bs) => (a, b) :: zip as bs
> | _ => []
>
> when unification isn't possible?
More information about the Ur
mailing list