equal
deleted
inserted
replaced
33 |
33 |
34 (*stamps*) |
34 (*stamps*) |
35 type stamp |
35 type stamp |
36 val stamp: unit -> stamp |
36 val stamp: unit -> stamp |
37 |
37 |
38 (*options*) |
|
39 val is_none: 'a option -> bool |
|
40 |
|
41 (*old options -- invalidated*) |
38 (*old options -- invalidated*) |
42 datatype invalid = None of invalid |
39 datatype invalid = None of invalid |
43 exception OPTION of invalid |
40 exception OPTION of invalid |
|
41 |
|
42 (*options*) |
|
43 val the: 'a option -> 'a |
|
44 val if_none: 'a option -> 'a -> 'a |
|
45 val is_some: 'a option -> bool |
|
46 val is_none: 'a option -> bool |
44 |
47 |
45 exception ERROR |
48 exception ERROR |
46 val try: ('a -> 'b) -> 'a -> 'b option |
49 val try: ('a -> 'b) -> 'a -> 'b option |
47 val can: ('a -> 'b) -> 'a -> bool |
50 val can: ('a -> 'b) -> 'a -> bool |
48 datatype 'a result = Result of 'a | Exn of exn |
51 datatype 'a result = Result of 'a | Exn of exn |
260 end; |
263 end; |
261 |
264 |
262 signature LIBRARY = |
265 signature LIBRARY = |
263 sig |
266 sig |
264 include BASIC_LIBRARY |
267 include BASIC_LIBRARY |
265 |
|
266 val the: 'a option -> 'a |
|
267 val if_none: 'a option -> 'a -> 'a |
|
268 val is_some: 'a option -> bool |
|
269 val apsome: ('a -> 'b) -> 'a option -> 'b option |
|
270 |
|
271 val rev_append: 'a list -> 'a list -> 'a list |
|
272 val foldl: ('a * 'b -> 'a) -> 'a * 'b list -> 'a |
268 val foldl: ('a * 'b -> 'a) -> 'a * 'b list -> 'a |
273 val foldr: ('a * 'b -> 'b) -> 'a list * 'b -> 'b |
269 val foldr: ('a * 'b -> 'b) -> 'a list * 'b -> 'b |
274 val take: int * 'a list -> 'a list |
270 val take: int * 'a list -> 'a list |
275 val drop: int * 'a list -> 'a list |
271 val drop: int * 'a list -> 'a list |
276 val nth_elem: int * 'a list -> 'a |
272 val nth_elem: int * 'a list -> 'a |
323 |
319 |
324 |
320 |
325 |
321 |
326 (** options **) |
322 (** options **) |
327 |
323 |
328 val the = valOf; |
|
329 fun if_none opt a = getOpt (opt, a); |
|
330 val is_some = isSome; |
|
331 fun is_none opt = not (isSome opt); |
|
332 val apsome = Option.map; |
|
333 |
|
334 (*invalidate former constructors to prevent accidental use as match-all patterns!*) |
324 (*invalidate former constructors to prevent accidental use as match-all patterns!*) |
335 datatype invalid = None of invalid; |
325 datatype invalid = None of invalid; |
336 exception OPTION of invalid; |
326 exception OPTION of invalid; |
|
327 |
|
328 val the = Option.valOf; |
|
329 |
|
330 (*strict!*) |
|
331 fun if_none NONE y = y |
|
332 | if_none (SOME x) _ = x; |
|
333 |
|
334 fun is_some (SOME _) = true |
|
335 | is_some NONE = false; |
|
336 |
|
337 fun is_none (SOME _) = false |
|
338 | is_none NONE = true; |
337 |
339 |
338 |
340 |
339 (* exception handling *) |
341 (* exception handling *) |
340 |
342 |
341 exception ERROR; |
343 exception ERROR; |
443 |
445 |
444 fun cons x xs = x :: xs; |
446 fun cons x xs = x :: xs; |
445 fun single x = [x]; |
447 fun single x = [x]; |
446 |
448 |
447 fun append xs ys = xs @ ys; |
449 fun append xs ys = xs @ ys; |
448 |
|
449 fun rev_append xs ys = List.revAppend (xs, ys); |
|
450 |
450 |
451 fun apply [] x = x |
451 fun apply [] x = x |
452 | apply (f :: fs) x = apply fs (f x); |
452 | apply (f :: fs) x = apply fs (f x); |
453 |
453 |
454 |
454 |