1(* FILE:      seq.sig
2 * AUTHOR:    Michael Norrish
3 * COPYRIGHT: University of Cambridge 1999
4 *
5 * NOTE:      Implementation of a lazy list, based on Larry Paulson's
6 *            example from his "ML for the working programmer" but
7 *            lazier.
8 *
9 * $Id$
10 *)
11
12
13signature seq = sig
14type 'a seq
15
16val cases : 'a seq -> ('a * 'a seq) option
17val fcases : 'a seq -> ('b * (('a * 'a seq) -> 'b)) -> 'b
18
19val append : 'a seq -> 'a seq -> 'a seq
20
21val result : 'a -> 'a seq
22val fresult : (unit -> 'a option) -> 'a seq
23val delay : (unit -> 'a seq) -> 'a seq
24
25val fromList : 'a list -> 'a seq
26
27val flatten : 'a seq seq -> 'a seq
28
29val map : ('a -> 'b) -> 'a seq -> 'b seq
30val mapPartial : ('a -> 'b option) -> 'a seq -> 'b seq
31val filter : ('a -> bool) -> 'a seq -> 'a seq
32val bind : 'a seq -> ('a -> 'b seq) -> 'b seq
33
34val empty : 'a seq
35val null : 'a seq -> bool
36val hd : 'a seq -> 'a
37val tl : 'a seq -> 'a seq
38val cons : 'a -> 'a seq -> 'a seq
39
40val take : int -> 'a seq -> 'a list
41val drop : int -> 'a seq -> 'a seq
42val length : 'a seq -> int
43
44end
45