module ListUtils where
-- create a singleton list
--
singleton :: a -> [a]
singleton x = [x]
-- create a list of length n
--
--replicate :: Int -> a -> [a]
--replicate n x = take n (repeat x)
-- apply a function to the nth element of a list
--
onNth :: Int -> (a -> a) -> [a] -> [a]
-- onNth n f xs | n<1 = xs
-- onNth 1 f (x:xs) = f x:xs
-- onNth n f (x:xs) = x:onNth (n-1) f xs
onNth n f xs | n<1 = xs
onNth n f xs = case splitAt (n-1) xs of
(ys,[]) -> ys
(ys,z:zs') -> ys++f z:zs'