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