comparison src/expl_util.sig @ 624:354800878b4d

Kind polymorphism through Explify
author Adam Chlipala <adamc@hcoop.net>
date Sun, 22 Feb 2009 16:32:56 -0500
parents ab86aa858e6c
children
comparison
equal deleted inserted replaced
623:588b9d16b00a 624:354800878b4d
26 *) 26 *)
27 27
28 signature EXPL_UTIL = sig 28 signature EXPL_UTIL = sig
29 29
30 structure Kind : sig 30 structure Kind : sig
31 val mapfoldB : {kind : ('context, Expl.kind', 'state, 'abort) Search.mapfolderB,
32 bind : 'context * string -> 'context}
33 -> ('context, Expl.kind, 'state, 'abort) Search.mapfolderB
31 val mapfold : (Expl.kind', 'state, 'abort) Search.mapfolder 34 val mapfold : (Expl.kind', 'state, 'abort) Search.mapfolder
32 -> (Expl.kind, 'state, 'abort) Search.mapfolder 35 -> (Expl.kind, 'state, 'abort) Search.mapfolder
33 val exists : (Expl.kind' -> bool) -> Expl.kind -> bool 36 val exists : (Expl.kind' -> bool) -> Expl.kind -> bool
37 val mapB : {kind : 'context -> Expl.kind' -> Expl.kind',
38 bind : 'context * string -> 'context}
39 -> 'context -> (Expl.kind -> Expl.kind)
34 end 40 end
35 41
36 structure Con : sig 42 structure Con : sig
37 datatype binder = 43 datatype binder =
38 Rel of string * Expl.kind 44 RelK of string
39 | Named of string * Expl.kind 45 | RelC of string * Expl.kind
46 | NamedC of string * Expl.kind
40 47
41 val mapfoldB : {kind : (Expl.kind', 'state, 'abort) Search.mapfolder, 48 val mapfoldB : {kind : ('context, Expl.kind', 'state, 'abort) Search.mapfolderB,
42 con : ('context, Expl.con', 'state, 'abort) Search.mapfolderB, 49 con : ('context, Expl.con', 'state, 'abort) Search.mapfolderB,
43 bind : 'context * binder -> 'context} 50 bind : 'context * binder -> 'context}
44 -> ('context, Expl.con, 'state, 'abort) Search.mapfolderB 51 -> ('context, Expl.con, 'state, 'abort) Search.mapfolderB
45 val mapfold : {kind : (Expl.kind', 'state, 'abort) Search.mapfolder, 52 val mapfold : {kind : (Expl.kind', 'state, 'abort) Search.mapfolder,
46 con : (Expl.con', 'state, 'abort) Search.mapfolder} 53 con : (Expl.con', 'state, 'abort) Search.mapfolder}
47 -> (Expl.con, 'state, 'abort) Search.mapfolder 54 -> (Expl.con, 'state, 'abort) Search.mapfolder
48 55
49 val mapB : {kind : Expl.kind' -> Expl.kind', 56 val mapB : {kind : 'context -> Expl.kind' -> Expl.kind',
50 con : 'context -> Expl.con' -> Expl.con', 57 con : 'context -> Expl.con' -> Expl.con',
51 bind : 'context * binder -> 'context} 58 bind : 'context * binder -> 'context}
52 -> 'context -> (Expl.con -> Expl.con) 59 -> 'context -> (Expl.con -> Expl.con)
53 val map : {kind : Expl.kind' -> Expl.kind', 60 val map : {kind : Expl.kind' -> Expl.kind',
54 con : Expl.con' -> Expl.con'} 61 con : Expl.con' -> Expl.con'}
57 con : Expl.con' -> bool} -> Expl.con -> bool 64 con : Expl.con' -> bool} -> Expl.con -> bool
58 end 65 end
59 66
60 structure Exp : sig 67 structure Exp : sig
61 datatype binder = 68 datatype binder =
62 RelC of string * Expl.kind 69 RelK of string
70 | RelC of string * Expl.kind
63 | NamedC of string * Expl.kind 71 | NamedC of string * Expl.kind
64 | RelE of string * Expl.con 72 | RelE of string * Expl.con
65 | NamedE of string * Expl.con 73 | NamedE of string * Expl.con
66 74
67 val mapfoldB : {kind : (Expl.kind', 'state, 'abort) Search.mapfolder, 75 val mapfoldB : {kind : ('context, Expl.kind', 'state, 'abort) Search.mapfolderB,
68 con : ('context, Expl.con', 'state, 'abort) Search.mapfolderB, 76 con : ('context, Expl.con', 'state, 'abort) Search.mapfolderB,
69 exp : ('context, Expl.exp', 'state, 'abort) Search.mapfolderB, 77 exp : ('context, Expl.exp', 'state, 'abort) Search.mapfolderB,
70 bind : 'context * binder -> 'context} 78 bind : 'context * binder -> 'context}
71 -> ('context, Expl.exp, 'state, 'abort) Search.mapfolderB 79 -> ('context, Expl.exp, 'state, 'abort) Search.mapfolderB
72 val mapfold : {kind : (Expl.kind', 'state, 'abort) Search.mapfolder, 80 val mapfold : {kind : (Expl.kind', 'state, 'abort) Search.mapfolder,
78 exp : Expl.exp' -> bool} -> Expl.exp -> bool 86 exp : Expl.exp' -> bool} -> Expl.exp -> bool
79 end 87 end
80 88
81 structure Sgn : sig 89 structure Sgn : sig
82 datatype binder = 90 datatype binder =
83 RelC of string * Expl.kind 91 RelK of string
92 | RelC of string * Expl.kind
84 | NamedC of string * Expl.kind 93 | NamedC of string * Expl.kind
85 | Sgn of string * Expl.sgn 94 | Sgn of string * Expl.sgn
86 | Str of string * Expl.sgn 95 | Str of string * Expl.sgn
87 96
88 val mapfoldB : {kind : (Expl.kind', 'state, 'abort) Search.mapfolder, 97 val mapfoldB : {kind : ('context, Expl.kind', 'state, 'abort) Search.mapfolderB,
89 con : ('context, Expl.con', 'state, 'abort) Search.mapfolderB, 98 con : ('context, Expl.con', 'state, 'abort) Search.mapfolderB,
90 sgn_item : ('context, Expl.sgn_item', 'state, 'abort) Search.mapfolderB, 99 sgn_item : ('context, Expl.sgn_item', 'state, 'abort) Search.mapfolderB,
91 sgn : ('context, Expl.sgn', 'state, 'abort) Search.mapfolderB, 100 sgn : ('context, Expl.sgn', 'state, 'abort) Search.mapfolderB,
92 bind : 'context * binder -> 'context} 101 bind : 'context * binder -> 'context}
93 -> ('context, Expl.sgn, 'state, 'abort) Search.mapfolderB 102 -> ('context, Expl.sgn, 'state, 'abort) Search.mapfolderB