// File : Ursl.dcl // Author : Richard A. O'Keefe // Version: 1 // SCCS : @(#)99/03/22 Ursl.dcl 1.3 // Purpose: Specify UnRolled Strict Lists in Clean. definition module Ursl import StdClass, StdOverloaded, Maybe :: Ursl a instance == (Ursl a) | == a instance < (Ursl a) | < a instance length Ursl instance fromString (Ursl a) | fromChar a instance % (Ursl a) zeroUrsl :: (Ursl a) nullUrsl :: !(Ursl a) -> Bool isEmptyUrsl :: !(Ursl a) -> Bool lengthUrsl :: !(Ursl a) -> Int lenUrsl :: !(Ursl a) -> Int toUrsl :: ![a] -> *(Ursl a) fromUrsl :: !(Ursl a) -> *[!a] mapAccumLUrsl :: !(a !b -> (a,c)) a !(Ursl b) -> *(a, *Ursl c) mapAccumRUrsl :: !(a !b -> (a,c)) a !(Ursl b) -> *(a, *Ursl c) mapUrsl :: !(!a -> b) !(Ursl a) -> *(Ursl b) map2Ursl :: !(!a !b -> c) !(Ursl a) !(Ursl b) -> *(Ursl c) redUrsl :: !(!a !b -> a) !a !(Ursl b) -> a red2Ursl :: !(!a !b !c -> a) !a !(Ursl b) !(Ursl c) -> a nthUrsl :: !(Ursl a) !Int -> a replicateUrsl :: !Int !a -> (Ursl a) newUrsl :: !(!Int -> a) !Int -> *(Ursl a) appUrsl :: !(Ursl a) !(Ursl a) -> (Ursl a) // may yet be *(Ursl a) one day hdUrsl :: !(Ursl a) -> a headUrsl :: !(Ursl a) -> a botUrsl :: !(Ursl a) -> a loextUrsl :: !a !(Ursl a) -> *(Ursl a) tlUrsl :: !(Ursl a) -> *(Ursl a) tailUrsl :: !(Ursl a) -> *(Ursl a) loremUrsl :: !(Ursl a) -> *(Ursl a) lastUrsl :: !(Ursl a) -> a topUrsl :: !(Ursl a) -> a hiextUrsl :: !a !(Ursl a) -> *(Ursl a) initUrsl :: !(Ursl a) -> *(Ursl a) hiremUrsl :: !(Ursl a) -> *(Ursl a) partitionUrsl :: !(!a -> Bool) !(Ursl a) -> *(*Ursl a, *Ursl a) filterUrsl :: !(!a -> Bool) !(Ursl a) -> *(Ursl a) allUrsl :: !(!a -> Bool) !(Ursl a) -> Bool notElemUrsl :: !a !(Ursl a) -> Bool | == a anyUrsl :: !(!a -> Bool) !(Ursl a) -> Bool elemUrsl :: !a !(Ursl a) -> Bool | == a isPrefixUrsl :: !(Ursl a) !(Ursl a) -> Bool | == a isSuffixUrsl :: !(Ursl a) !(Ursl a) -> Bool | == a takeUrsl :: !Int !(Ursl a) -> *(Ursl a) takeWhileUrsl :: !(!a -> Bool) !(Ursl a) -> *(Ursl a) dropUrsl :: !Int !(Ursl a) -> (Ursl a) dropWhileUrsl :: !(!a -> Bool) !(Ursl a) -> (Ursl a) splitAtUrsl :: !Int !(Ursl a) -> *(*Ursl a, Ursl a) spanUrsl :: !(!a -> Bool) !(Ursl a) -> *(*Ursl a, Ursl a) breakUrsl :: !(!a -> Bool) !(Ursl a) -> *(*Ursl a, Ursl a) zipListUrsl :: ![a] !(Ursl b) -> *(Ursl !*(a,b)) zipUrslUrsl :: !(Ursl a) !(Ursl b) -> *(Ursl !*(a,b)) zipUrsl :: !(!Ursl a, !Ursl b) -> *(Ursl !*(a,b)) zipWithListUrsl :: !(!a !b -> c) ![a] !(Ursl b) -> *(Ursl c) zipWithUrslUrsl :: !(!a !b -> c) !(Ursl a) !(Ursl b) -> *(Ursl c) zipWithUrsl :: !(!a !b -> c) !(!Ursl a, !Ursl b) -> *(Ursl c) unzipUrsl :: !(Ursl (a,b)) -> *(!*Ursl a, !*Ursl b) foldlUrsl :: !(a !b -> a) a !(Ursl b) -> a foldl1Ursl :: (!a !a -> a) !(Ursl a) -> a scanlUrsl :: !(!a !b -> a) !a !(Ursl b) -> *(Ursl a) scanl1Ursl :: !(!a !a -> a) !(Ursl a) -> *(Ursl a) foldrUrsl :: !(!a b -> b) b !(Ursl a) -> b foldr1Ursl :: !(!a !a -> a) !(Ursl a) -> a scanrUrsl :: !(!b a -> a) a !(Ursl b) -> *(Ursl a) scanr1Ursl :: !(!a !a -> a) !(Ursl a) -> *(Ursl a) reverseUrsl :: !(Ursl a) -> *(Ursl a) reverseFromUrsl :: !(Ursl a) -> *[!a] sumUrsl :: !(Ursl a) -> a | +, zero a productUrsl :: !(Ursl a) -> a | *, one a maximumUrsl :: !(Ursl a) -> a | Ord a minimumUrsl :: !(Ursl a) -> a | Ord a elemIndicesUrsl :: !a !(Ursl a) -> *[!Int] | == a findIndicesUrsl :: !(!a -> Bool) !(Ursl a) -> *[!Int] elemIndexUrsl :: !a !(Ursl a) -> *Maybe !Int | == a findIndexUrsl :: !(!a -> Bool) !(Ursl a) -> *Maybe !Int findUrsl :: !(!a -> Bool) !(Ursl a) -> *Maybe a lookupUrsl :: !a !(Ursl (a,b)) -> *Maybe b | == a