src/Pure/library.ML
changeset 15970 b8855873d234
parent 15965 f422f8283491
child 16129 6fa9ace50240
equal deleted inserted replaced
15969:201f6738480f 15970:b8855873d234
    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