src/Tools/Metis/src/Useful.sig
changeset 39353 7f11d833d65b
parent 25430 372d6749f00e
parent 39349 2d0a4361c3ef
child 39409 782477d78f63
equal deleted inserted replaced
39313:41ce0b56d858 39353:7f11d833d65b
     1 (* ========================================================================= *)
     1 (* ========================================================================= *)
     2 (* ML UTILITY FUNCTIONS                                                      *)
     2 (* ML UTILITY FUNCTIONS                                                      *)
     3 (* Copyright (c) 2001-2005 Joe Hurd, distributed under the BSD License *)
     3 (* Copyright (c) 2001 Joe Hurd, distributed under the BSD License            *)
     4 (* ========================================================================= *)
     4 (* ========================================================================= *)
     5 
     5 
     6 signature Useful =
     6 signature Useful =
     7 sig
     7 sig
     8 
     8 
    12 
    12 
    13 exception Error of string
    13 exception Error of string
    14 
    14 
    15 exception Bug of string
    15 exception Bug of string
    16 
    16 
    17 val partial : exn -> ('a -> 'b option) -> 'a -> 'b
       
    18 
       
    19 val total : ('a -> 'b) -> 'a -> 'b option
    17 val total : ('a -> 'b) -> 'a -> 'b option
    20 
    18 
    21 val can : ('a -> 'b) -> 'a -> bool
    19 val can : ('a -> 'b) -> 'a -> bool
    22 
    20 
    23 (* ------------------------------------------------------------------------- *)
    21 (* ------------------------------------------------------------------------- *)
    44 
    42 
    45 val funpow : int -> ('a -> 'a) -> 'a -> 'a
    43 val funpow : int -> ('a -> 'a) -> 'a -> 'a
    46 
    44 
    47 val exp : ('a * 'a -> 'a) -> 'a -> int -> 'a -> 'a
    45 val exp : ('a * 'a -> 'a) -> 'a -> int -> 'a -> 'a
    48 
    46 
       
    47 (* ------------------------------------------------------------------------- *)
       
    48 (* Pairs.                                                                    *)
       
    49 (* ------------------------------------------------------------------------- *)
       
    50 
       
    51 val fst : 'a * 'b -> 'a
       
    52 
       
    53 val snd : 'a * 'b -> 'b
       
    54 
       
    55 val pair : 'a -> 'b -> 'a * 'b
       
    56 
       
    57 val swap : 'a * 'b -> 'b * 'a
       
    58 
       
    59 val curry : ('a * 'b -> 'c) -> 'a -> 'b -> 'c
       
    60 
       
    61 val uncurry : ('a -> 'b -> 'c) -> 'a * 'b -> 'c
       
    62 
       
    63 val ## : ('a -> 'c) * ('b -> 'd) -> 'a * 'b -> 'c * 'd
       
    64 
       
    65 (* ------------------------------------------------------------------------- *)
       
    66 (* State transformers.                                                       *)
       
    67 (* ------------------------------------------------------------------------- *)
       
    68 
       
    69 val unit : 'a -> 's -> 'a * 's
       
    70 
       
    71 val bind : ('s -> 'a * 's) -> ('a -> 's -> 'b * 's) -> 's -> 'b * 's
       
    72 
       
    73 val mmap : ('a -> 'b) -> ('s -> 'a * 's) -> 's -> 'b * 's
       
    74 
       
    75 val mjoin : ('s -> ('s -> 'a * 's) * 's) -> 's -> 'a * 's
       
    76 
       
    77 val mwhile : ('a -> bool) -> ('a -> 's -> 'a * 's) -> 'a -> 's -> 'a * 's
       
    78 
       
    79 (* ------------------------------------------------------------------------- *)
       
    80 (* Equality.                                                                 *)
       
    81 (* ------------------------------------------------------------------------- *)
       
    82 
    49 val equal : ''a -> ''a -> bool
    83 val equal : ''a -> ''a -> bool
    50 
    84 
    51 val notEqual : ''a -> ''a -> bool
    85 val notEqual : ''a -> ''a -> bool
    52 
    86 
    53 (* ------------------------------------------------------------------------- *)
    87 val listEqual : ('a -> 'a -> bool) -> 'a list -> 'a list -> bool
    54 (* Pairs.                                                                    *)
       
    55 (* ------------------------------------------------------------------------- *)
       
    56 
       
    57 val fst : 'a * 'b -> 'a
       
    58 
       
    59 val snd : 'a * 'b -> 'b
       
    60 
       
    61 val pair : 'a -> 'b -> 'a * 'b
       
    62 
       
    63 val swap : 'a * 'b -> 'b * 'a
       
    64 
       
    65 val curry : ('a * 'b -> 'c) -> 'a -> 'b -> 'c
       
    66 
       
    67 val uncurry : ('a -> 'b -> 'c) -> 'a * 'b -> 'c
       
    68 
       
    69 val ## : ('a -> 'c) * ('b -> 'd) -> 'a * 'b -> 'c * 'd
       
    70 
       
    71 (* ------------------------------------------------------------------------- *)
       
    72 (* State transformers.                                                       *)
       
    73 (* ------------------------------------------------------------------------- *)
       
    74 
       
    75 val unit : 'a -> 's -> 'a * 's
       
    76 
       
    77 val bind : ('s -> 'a * 's) -> ('a -> 's -> 'b * 's) -> 's -> 'b * 's
       
    78 
       
    79 val mmap : ('a -> 'b) -> ('s -> 'a * 's) -> 's -> 'b * 's
       
    80 
       
    81 val mjoin : ('s -> ('s -> 'a * 's) * 's) -> 's -> 'a * 's
       
    82 
       
    83 val mwhile : ('a -> bool) -> ('a -> 's -> 'a * 's) -> 'a -> 's -> 'a * 's
       
    84 
       
    85 (* ------------------------------------------------------------------------- *)
       
    86 (* Lists: note we count elements from 0.                                     *)
       
    87 (* ------------------------------------------------------------------------- *)
       
    88 
       
    89 val cons : 'a -> 'a list -> 'a list
       
    90 
       
    91 val hdTl : 'a list -> 'a * 'a list
       
    92 
       
    93 val append : 'a list -> 'a list -> 'a list
       
    94 
       
    95 val singleton : 'a -> 'a list
       
    96 
       
    97 val first : ('a -> 'b option) -> 'a list -> 'b option
       
    98 
       
    99 val index : ('a -> bool) -> 'a list -> int option
       
   100 
       
   101 val maps : ('a -> 's -> 'b * 's) -> 'a list -> 's -> 'b list * 's
       
   102 
       
   103 val mapsPartial : ('a -> 's -> 'b option * 's) -> 'a list -> 's -> 'b list * 's
       
   104 
       
   105 val enumerate : 'a list -> (int * 'a) list
       
   106 
       
   107 val zipwith : ('a -> 'b -> 'c) -> 'a list -> 'b list -> 'c list
       
   108 
       
   109 val zip : 'a list -> 'b list -> ('a * 'b) list
       
   110 
       
   111 val unzip : ('a * 'b) list -> 'a list * 'b list
       
   112 
       
   113 val cartwith : ('a -> 'b -> 'c) -> 'a list -> 'b list -> 'c list
       
   114 
       
   115 val cart : 'a list -> 'b list -> ('a * 'b) list
       
   116 
       
   117 val divide : 'a list -> int -> 'a list * 'a list  (* Subscript *)
       
   118 
       
   119 val revDivide : 'a list -> int -> 'a list * 'a list  (* Subscript *)
       
   120 
       
   121 val updateNth : int * 'a -> 'a list -> 'a list  (* Subscript *)
       
   122 
       
   123 val deleteNth : int -> 'a list -> 'a list  (* Subscript *)
       
   124 
       
   125 (* ------------------------------------------------------------------------- *)
       
   126 (* Sets implemented with lists.                                              *)
       
   127 (* ------------------------------------------------------------------------- *)
       
   128 
       
   129 val mem : ''a -> ''a list -> bool
       
   130 
       
   131 val insert : ''a -> ''a list -> ''a list
       
   132 
       
   133 val delete : ''a -> ''a list -> ''a list
       
   134 
       
   135 val setify : ''a list -> ''a list  (* removes duplicates *)
       
   136 
       
   137 val union : ''a list -> ''a list -> ''a list
       
   138 
       
   139 val intersect : ''a list -> ''a list -> ''a list
       
   140 
       
   141 val difference : ''a list -> ''a list -> ''a list
       
   142 
       
   143 val subset : ''a list -> ''a list -> bool
       
   144 
       
   145 val distinct : ''a list -> bool
       
   146 
    88 
   147 (* ------------------------------------------------------------------------- *)
    89 (* ------------------------------------------------------------------------- *)
   148 (* Comparisons.                                                              *)
    90 (* Comparisons.                                                              *)
   149 (* ------------------------------------------------------------------------- *)
    91 (* ------------------------------------------------------------------------- *)
   150 
    92 
   157 
    99 
   158 val lexCompare : ('a * 'a -> order) -> 'a list * 'a list -> order
   100 val lexCompare : ('a * 'a -> order) -> 'a list * 'a list -> order
   159 
   101 
   160 val optionCompare : ('a * 'a -> order) -> 'a option * 'a option -> order
   102 val optionCompare : ('a * 'a -> order) -> 'a option * 'a option -> order
   161 
   103 
   162 val boolCompare : bool * bool -> order  (* true < false *)
   104 val boolCompare : bool * bool -> order  (* false < true *)
       
   105 
       
   106 (* ------------------------------------------------------------------------- *)
       
   107 (* Lists: note we count elements from 0.                                     *)
       
   108 (* ------------------------------------------------------------------------- *)
       
   109 
       
   110 val cons : 'a -> 'a list -> 'a list
       
   111 
       
   112 val hdTl : 'a list -> 'a * 'a list
       
   113 
       
   114 val append : 'a list -> 'a list -> 'a list
       
   115 
       
   116 val singleton : 'a -> 'a list
       
   117 
       
   118 val first : ('a -> 'b option) -> 'a list -> 'b option
       
   119 
       
   120 val maps : ('a -> 's -> 'b * 's) -> 'a list -> 's -> 'b list * 's
       
   121 
       
   122 val mapsPartial : ('a -> 's -> 'b option * 's) -> 'a list -> 's -> 'b list * 's
       
   123 
       
   124 val zipWith : ('a -> 'b -> 'c) -> 'a list -> 'b list -> 'c list
       
   125 
       
   126 val zip : 'a list -> 'b list -> ('a * 'b) list
       
   127 
       
   128 val unzip : ('a * 'b) list -> 'a list * 'b list
       
   129 
       
   130 val cartwith : ('a -> 'b -> 'c) -> 'a list -> 'b list -> 'c list
       
   131 
       
   132 val cart : 'a list -> 'b list -> ('a * 'b) list
       
   133 
       
   134 val takeWhile : ('a -> bool) -> 'a list -> 'a list
       
   135 
       
   136 val dropWhile : ('a -> bool) -> 'a list -> 'a list
       
   137 
       
   138 val divideWhile : ('a -> bool) -> 'a list -> 'a list * 'a list
       
   139 
       
   140 val groups : ('a * 's -> bool * 's) -> 's -> 'a list -> 'a list list
       
   141 
       
   142 val groupsBy : ('a * 'a -> bool) -> 'a list -> 'a list list
       
   143 
       
   144 val groupsByFst : (''a * 'b) list -> (''a * 'b list) list
       
   145 
       
   146 val groupsOf : int -> 'a list -> 'a list list
       
   147 
       
   148 val index : ('a -> bool) -> 'a list -> int option
       
   149 
       
   150 val enumerate : 'a list -> (int * 'a) list
       
   151 
       
   152 val divide : 'a list -> int -> 'a list * 'a list  (* Subscript *)
       
   153 
       
   154 val revDivide : 'a list -> int -> 'a list * 'a list  (* Subscript *)
       
   155 
       
   156 val updateNth : int * 'a -> 'a list -> 'a list  (* Subscript *)
       
   157 
       
   158 val deleteNth : int -> 'a list -> 'a list  (* Subscript *)
       
   159 
       
   160 (* ------------------------------------------------------------------------- *)
       
   161 (* Sets implemented with lists.                                              *)
       
   162 (* ------------------------------------------------------------------------- *)
       
   163 
       
   164 val mem : ''a -> ''a list -> bool
       
   165 
       
   166 val insert : ''a -> ''a list -> ''a list
       
   167 
       
   168 val delete : ''a -> ''a list -> ''a list
       
   169 
       
   170 val setify : ''a list -> ''a list  (* removes duplicates *)
       
   171 
       
   172 val union : ''a list -> ''a list -> ''a list
       
   173 
       
   174 val intersect : ''a list -> ''a list -> ''a list
       
   175 
       
   176 val difference : ''a list -> ''a list -> ''a list
       
   177 
       
   178 val subset : ''a list -> ''a list -> bool
       
   179 
       
   180 val distinct : ''a list -> bool
   163 
   181 
   164 (* ------------------------------------------------------------------------- *)
   182 (* ------------------------------------------------------------------------- *)
   165 (* Sorting and searching.                                                    *)
   183 (* Sorting and searching.                                                    *)
   166 (* ------------------------------------------------------------------------- *)
   184 (* ------------------------------------------------------------------------- *)
   167 
   185 
   207 
   225 
   208 val join : string -> string list -> string
   226 val join : string -> string list -> string
   209 
   227 
   210 val split : string -> string -> string list
   228 val split : string -> string -> string list
   211 
   229 
       
   230 val capitalize : string -> string
       
   231 
   212 val mkPrefix : string -> string -> string
   232 val mkPrefix : string -> string -> string
   213 
   233 
   214 val destPrefix : string -> string -> string
   234 val destPrefix : string -> string -> string
   215 
   235 
   216 val isPrefix : string -> string -> bool
   236 val isPrefix : string -> string -> bool
   217 
   237 
       
   238 val stripPrefix : (char -> bool) -> string -> string
       
   239 
       
   240 val mkSuffix : string -> string -> string
       
   241 
       
   242 val destSuffix : string -> string -> string
       
   243 
       
   244 val isSuffix : string -> string -> bool
       
   245 
       
   246 val stripSuffix : (char -> bool) -> string -> string
       
   247 
   218 (* ------------------------------------------------------------------------- *)
   248 (* ------------------------------------------------------------------------- *)
   219 (* Tables.                                                                   *)
   249 (* Tables.                                                                   *)
   220 (* ------------------------------------------------------------------------- *)
   250 (* ------------------------------------------------------------------------- *)
   221 
   251 
   222 type columnAlignment = {leftAlign : bool, padChar : char}
   252 type columnAlignment = {leftAlign : bool, padChar : char}
   269 
   299 
   270 val time : unit -> string
   300 val time : unit -> string
   271 
   301 
   272 val date : unit -> string
   302 val date : unit -> string
   273 
   303 
       
   304 val readDirectory : {directory : string} -> {filename : string} list
       
   305 
   274 val readTextFile : {filename : string} -> string
   306 val readTextFile : {filename : string} -> string
   275 
   307 
   276 val writeTextFile : {filename : string, contents : string} -> unit
   308 val writeTextFile : {contents : string, filename : string} -> unit
   277 
   309 
   278 (* ------------------------------------------------------------------------- *)
   310 (* ------------------------------------------------------------------------- *)
   279 (* Profiling and error reporting.                                            *)
   311 (* Profiling and error reporting.                                            *)
   280 (* ------------------------------------------------------------------------- *)
   312 (* ------------------------------------------------------------------------- *)
   281 
   313 
   282 val try : ('a -> 'b) -> 'a -> 'b
   314 val try : ('a -> 'b) -> 'a -> 'b
   283 
   315 
       
   316 val chat : string -> unit
       
   317 
   284 val warn : string -> unit
   318 val warn : string -> unit
   285 
   319 
   286 val die : string -> 'exit
   320 val die : string -> 'exit
   287 
   321 
   288 val timed : ('a -> 'b) -> 'a -> real * 'b
   322 val timed : ('a -> 'b) -> 'a -> real * 'b