(* File : raum-sig.sml SCCS : "%Z%20%E% %M% %I%" Author : Richard A. O'Keefe Purpose: Signature of Reverse-Append-Unit-eMpty "lists" *) signature RAUM = sig type 'x raum (* elementary construction *) val empty : 'x raum val singleton : 'x -> 'x raum val cons : 'x -> 'x raum -> 'x raum val snoc : 'x -> 'x raum -> 'x raum val fromList : 'x list -> 'x raum val toList : 'x raum -> 'x list (* analogues of functions in top level environment *) val @ : 'x raum * 'x raum -> 'x raum val cat : 'x raum -> 'x raum -> 'x raum val foldl : ('x * 'y -> 'y) -> 'y -> 'x raum -> 'y val foldr : ('x * 'y -> 'y) -> 'y -> 'x raum -> 'y val hd : 'x raum -> 'x val length : 'x raum -> int val map : ('x -> 'y) -> 'x raum -> 'y raum val null : 'x raum -> bool val rev : 'x raum -> 'x raum val tl : 'x raum -> 'x raum (* analogues of functions in List *) val all : ('x -> bool) -> 'x raum -> bool val collate : ('x * 'x -> order) -> 'x raum * 'x raum -> order val concat : 'x raum list -> 'x raum val drop : 'x raum * int -> 'x raum val exists : ('x -> bool) -> 'x raum -> bool val filter : ('x -> bool) -> 'x raum -> 'x raum val find : ('x -> bool) -> 'x raum -> 'x option val getItem : 'x raum -> ('x * 'x raum) option val last : 'x raum -> 'x val mapPartial : ('x -> 'y option) -> 'x raum -> 'y raum val nth : 'x raum * int -> 'x val partition : ('x -> bool) -> 'x raum -> ('x raum * 'x raum) val revAppend : 'x raum * 'x raum -> 'x raum val tabulate : int * (int -> 'x) -> 'x raum val take : 'x raum * int -> 'x raum (* two folds that make special sense for this data structure *) val fold : ('x * 'x -> 'x) -> 'x -> 'x raum -> 'x val fold1 : ('x * 'x -> 'x) -> 'x raum -> 'x (* analogues of functions in Haskell's List module *) val break : ('x -> bool) -> 'x raum -> ('x raum * 'x raum) val concatMap : ('x -> 'y raum) -> 'x list -> 'y raum val dropWhile : ('x -> bool) -> 'x raum -> 'x raum val elem : (''x * ''x raum) -> bool val elemIndex : (''x * ''x raum) -> int option val findIndex : ('x -> bool) -> 'x raum -> int option val group : ''x raum -> ''x raum list val groupBy : ('x * 'x -> bool) -> 'x raum -> 'x raum list val inits : 'x raum -> 'x raum list val intercalate : 'x raum -> 'x raum list -> 'x raum val intersperse : 'x -> 'x raum -> 'x raum val isInfixOf : (''x raum * ''x raum) -> bool val isPrefixOf : (''x raum * ''x raum) -> bool val isSuffixOf : (''x raum * ''x raum) -> bool val lookup : ''x -> (''x * 'y) raum -> 'y option val mapAccumL : (('a*'x) -> ('a*'y)) -> 'a -> 'x raum -> ('a * 'y raum) val mapAccumR : (('a*'x) -> ('a*'y)) -> 'a -> 'x raum -> ('a * 'y raum) val maximumBy : (('x * 'x) -> order) -> 'x raum -> 'x val minimumBy : (('x * 'x) -> order) -> 'x raum -> 'x val notElem : (''x * ''x raum) -> bool val product : int raum -> int val replicate : (int * 'x) -> 'x raum val span : ('x -> bool) -> 'x raum -> ('x raum * 'x raum) val splitAt : ('x raum * int) -> ('x raum * 'x raum) val stripPrefix : ''x raum -> ''x raum -> ''x raum option val stripSuffix : ''x raum -> ''x raum -> ''x raum option val sum : int raum -> int val takeWhile : ('x -> bool) -> 'x raum -> 'x raum val tails : 'x raum -> 'x raum list val unfoldr : ('y -> ('x * 'y) option) -> 'y -> 'x raum end