File: 148_sharing.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 (51 lines) | stat: -rw-r--r-- 1,304 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
40
41
42
43
44
45
46
47
48
49
50
51
signature S1 =
sig
  datatype s = S
  datatype a = T of s
end
signature S =
sig
  structure T1 : S1
  structure T2 : sig
    structure T1 : S1
  end
  sharing T1 = T2.T1
end

(*
2011-11-28 katsu

This causes an unexpected name error.

base.sml:12.3-12.20 Error:
  (name evaluation Sig-050) Signature mismatch in sharing type clause:T2.T1.a

*)

(*
2011-11-28 ohori

Fixed.

In the definition of Standard ML, 
  sharing strPath1 = ... = strPathi
is just a shorthand for the set of 
   sharing type strPath1.typId = ... = strPathi.typId 
for all possibe typeId. This is due to the "sloppy" nature of SML
signature; SML allows inconsistent signatures, i.e. those that do 
not have any instance. This is problematic in separate compilation 
of SML# since it need to generate a structure instance for signature
in functor compilation.

So SML# adopt a stricter semantics of signatures, requiring that any
signature must be consistent. This require to check signature
consistency at name evaluation, which we do. Since
 sharing strPath1 = strPath2
denotes a set of sharing type constraint, type consistency cheking for
the set must be donw under the assumption that all the ids in each set 
be equilvalent. 

The bug fix extends the consistency checking function with those
required equivalence relations.

*)