elm/core-elm/List.elm
evancz e7cadaf9ab Add a bunch of core Elm modules. These are not directly integrated in the compiler right now.
Currently, these files are either unused or compiled down to JS and included in the runtime system (i.e. `elm-runtime-x.y.z.js`)

They will eventually get incorporated into the compiler though!
2012-10-04 22:01:20 -04:00

59 lines
1.6 KiB
Elm

head (h:t) = h
tail (h:t) = t
map f lst = case lst of { x:xs -> f x : map f xs; [] -> [] }
foldl f b lst = case lst of { x:xs -> foldl f (f x b) xs; [] -> b }
foldr f b lst = case lst of { x:xs -> f x (foldr f b xs); [] -> b }
foldl1 f (x:xs) = foldl f x xs
foldr1 f (x:xs) = foldr f x xs
scanl f b xs = b : (case xs of { x:xs -> scanl f (f x b) xs; [] -> [] })
scanl1 f lst = case lst of { x:xs -> scanl f x xs; [] -> [] }
filter pred lst =
case lst of
{ x:xs -> if pred x then x : filter pred xs else filter pred xs
; [] -> [] }
length = foldl (\x c -> 1 + c) 0
reverse = foldl (:) []
concat = foldr (++) []
concatMap f = concat . map f
and = foldl (&&) True
or = foldl (||) False
forall pred = foldl (\x acc -> acc && pred x) True
exists pred = foldl (\x acc -> acc || pred x) False
sum = foldl (+) 0
product = foldl (*) 1
maximum = foldl1 max
minimum = foldl1 min
partition pred lst =
case lst of
{ x:xs -> case partition pred xs of
{ (as,bs) -> if pred x then (x:as,bs) else (as,x:bs) }
; [] -> ([],[]) }
zipWith f listA listB = case (listA, listB) of
{ (a:as, b:bs) -> f a b : zipWith f as bs; _ -> [] }
zip listA listB = case (listA, listB) of
{ (a:as, b:bs) -> (a,b) : zip as bs; _ -> [] }
unzip pairs =
case pairs of
{ p:ps -> case (p, unzip ps) of { ((x,y),(xs,ys)) -> (x:xs,y:ys) }
; [] -> ([],[]) }
intersperse sep xs =
case xs of { a:b:cs -> a : sep : intersperse sep (b:cs)
; a:[] -> [a] ; [] -> [] }
intercalate sep xs =
case xs of { a:b:cs -> a ++ sep ++ intercalate sep (b:cs)
; a:[] -> a ; [] -> [] }