Import Upstream version 20180207
[hcoop/debian/mlton.git] / basis-library / arrays-and-vectors / sequence.sig
1 (* Copyright (C) 2017 Matthew Fluet.
2 * Copyright (C) 2014 Rob Simmons.
3 * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh
4 * Jagannathan, and Stephen Weeks.
5 * Copyright (C) 1997-2000 NEC Research Institute.
6 *
7 * MLton is released under a BSD-style license.
8 * See the file MLton-LICENSE for details.
9 *)
10
11 signature SEQUENCE =
12 sig
13 type 'a sequence
14 type 'a elt
15
16 structure Slice : SLICE where type 'a sequence = 'a sequence
17 and type 'a elt = 'a elt
18
19 val maxLen: int
20 val length: 'a sequence -> int
21 val sub: 'a sequence * int -> 'a elt
22 val unsafeSub: 'a sequence * int -> 'a elt
23 val update: 'a sequence * int * 'a elt -> unit
24 val unsafeUpdate: 'a sequence * int * 'a elt -> unit
25 val uninitIsNop: 'a sequence -> bool
26 val uninit: 'a sequence * int -> unit
27 val unsafeUninit: 'a sequence * int -> unit
28 val copy: {dst: 'a elt Array.array, di: int, src: 'a sequence} -> unit
29 val unsafeCopy: {dst: 'a elt Array.array, di: int, src: 'a sequence} -> unit
30 val tabulate: int * (int -> 'a elt) -> 'a sequence
31 val appi: (int * 'a elt -> unit) -> 'a sequence -> unit
32 val app: ('a elt -> unit) -> 'a sequence -> unit
33 val mapi : (int * 'a elt -> 'b elt) -> 'a sequence -> 'b sequence
34 val map: ('a elt -> 'b elt) -> 'a sequence -> 'b sequence
35 val foldli: (int * 'a elt * 'b -> 'b) -> 'b -> 'a sequence -> 'b
36 val foldl: ('a elt * 'b -> 'b) -> 'b -> 'a sequence -> 'b
37 val foldri: (int * 'a elt * 'b -> 'b) -> 'b -> 'a sequence -> 'b
38 val foldr: ('a elt * 'b -> 'b) -> 'b -> 'a sequence -> 'b
39 val findi: (int * 'a elt -> bool) -> 'a sequence -> (int * 'a elt) option
40 val find: ('a elt -> bool) -> 'a sequence -> 'a elt option
41 val existsi: (int * 'a elt -> bool) -> 'a sequence -> bool
42 val exists: ('a elt -> bool) -> 'a sequence -> bool
43 val alli: (int * 'a elt -> bool) -> 'a sequence -> bool
44 val all: ('a elt -> bool) -> 'a sequence -> bool
45 val collate: ('a elt * 'a elt -> order) -> 'a sequence * 'a sequence -> order
46 val fromList: 'a elt list -> 'a sequence
47 val toList: 'a sequence -> 'a elt list
48 val concat: 'a sequence list -> 'a sequence
49
50 (* Extra *)
51 val alloc: int -> 'a sequence
52 val append: 'a sequence * 'a sequence -> 'a sequence
53 val create:
54 int -> {done: unit -> 'a sequence,
55 sub: int -> 'a elt,
56 update: int * 'a elt -> unit}
57 val duplicate: 'a sequence -> 'a sequence
58 val new: int * 'a elt -> 'a sequence
59 val unfoldi: int * 'b * (int * 'b -> 'a elt * 'b) -> 'a sequence * 'b
60 val unfold: int * 'b * ('b -> 'a elt * 'b) -> 'a sequence * 'b
61 val unsafeAlloc: int -> 'a sequence
62 val unsafeNew: int * 'a elt -> 'a sequence
63
64 (* Used to implement Substring/String functions *)
65 val isPrefix: ('a elt * 'a elt -> bool) -> 'a sequence -> 'a sequence -> bool
66 val concatWith: 'a sequence -> 'a sequence list -> 'a sequence
67 val isSubsequence: ('a elt * 'a elt -> bool) -> 'a sequence -> 'a sequence -> bool
68 val isSuffix: ('a elt * 'a elt -> bool) -> 'a sequence -> 'a sequence -> bool
69 val translate: ('a elt -> 'b sequence) -> 'a sequence -> 'b sequence
70 val tokens: ('a elt -> bool) -> 'a sequence -> 'a sequence list
71 val fields: ('a elt -> bool) -> 'a sequence -> 'a sequence list
72 end