File: 150_functor.sml

package info (click to toggle)
smlsharp 4.1.0-1.1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 123,724 kB
  • sloc: ansic: 16,725; sh: 4,347; makefile: 2,191; java: 742; haskell: 493; ruby: 305; cpp: 284; pascal: 256; ml: 255; lisp: 141; asm: 97; sql: 74
file content (39 lines) | stat: -rw-r--r-- 673 bytes parent folder | download | duplicates (3)
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.

*)