[CakeML] Interaction of signature annotations and value restrictions
Scott Owens
S.A.Owens at kent.ac.uk
Mon Oct 5 12:00:17 UTC 2015
I tried out the example on Moscow ML and MLton where it works, and on SML/NJ where you get a type error. I agree that it would be nice to get this example to work, or at least to have type annotations so that the programmer could put annotations in the structure themselves. I think I know how to add type annotations, but it hasn’t ever become high-priority.
-Scott
> On 2015/10/04, at 04:40, Yong Kiam <tanyongkiam at gmail.com> wrote:
>
> Hi all,
>
> Here's an interesting bug/feature of CakeML's type system due to the way signatures are handled (and the value restriction):
>
> Consider:
>
> structure foo :> sig val f : int list -> int list ref val z:int list ref end =
> struct fun f x = ref x val z = f [] end
>
> Without the signature, the declaration val z = f [] violates the value restriction and doesn't type check.
>
> This makes the declaration of foo a type error in the current CakeML type system implementation because we first type check the structure before constraining it with the signature.
>
> This is accepted in Poly/ML (not sure about other ML implementations):
> > structure foo :> sig val f : int list -> int list ref val z:int list ref end = struct fun f x = ref x val z = f [] end;
> structure foo : sig val f : int list -> int list ref val z : int list ref end
>
> There might be an easy fix if we have type annotations: convert the annotations in signatures to actual annotations on the structure's values before type checking.
>
> _______________________________________________
> Users mailing list
> Users at cakeml.org
> https://lists.cakeml.org/listinfo/users
More information about the Users
mailing list