1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
(*
functor F (A : sig end) =
struct
type t (= boxed)
val f : t -> int
end
*)
infixr ::
functor F () =
struct
type t = int list
fun f nil = 0 | f (h::t) = h : int
end
(*
2011-11-28 katsu
This causes an unexpected type error.
150_functor.sml:2.9-6.3 Error:
(type inference 063-7) type and type annotation don't agree
inferred type: unit(t7[]) -> {1: int(t0[]) list(t15[]) -> int(t0[])}
type annotation: unit(t7[]) -> {1: t(t30[]) -> int(t0[])}
*)
(*
2011-11-28 ohori
Fixed.
When provide cheking of a functor body, those types declaraed as
type foo (= kind)
must be instantiated to actual types before generateing type constraint
declarations.
*)
|