-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathAbstractStr.sml
More file actions
32 lines (31 loc) · 1.02 KB
/
AbstractStr.sml
File metadata and controls
32 lines (31 loc) · 1.02 KB
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
signature Str =
sig
eqtype str
val rep_string : str -> str
val prt_string : (str -> 'a) -> str -> 'a
val toMLString : str -> string
val fromMLString : string -> str
val deconstruct_str : ('a -> 'b) -> (('a -> string * string * 'b list) -> 'c) -> 'c
val construct_str : ('a -> str) ->
(str -> 'b) -> string * 'a list -> 'b
end
functor AbstractStr
(eqtype str
val rep_string : str -> str
val prt_string : (str -> 'a) -> str -> 'a
val toMLString : str -> string
val fromMLString : string -> str) :> Str
where type str = str =
struct
type str = str
fun deconstruct_str str =
fn f => f (fn s => ("str","string",[str s]))
val rep_string = rep_string
val prt_string = prt_string
val toMLString = toMLString
val fromMLString = fromMLString
fun construct_str str rep_str =
fn arg => rep_str
(case arg of ("string",[s]) => rep_string (str s)
| (c,l) => raise Fail "str: no case")
end