We’ll explore some ways to carry out some List operations in Hasell.
Specifically, we’ll write functions that repeat each element of a list a specific (
n) number of times.
Our function signature. They take in an integer
n and a List of integers, and return a list of integers.
type RepElms = Int -> [Int] -> [Int]
Doing it Bottom-Up
rep :: Int -> Int -> [Int] rep n x = if n == 1 then [x] else x : rep (n-1) x
- Using Recursion
f :: RepElms f _  =  f n (x:xs) = if null xs then rep n x else rep n x ++ f n xs f 3 [2,4,6,8,10,12,14]
f2 :: RepElms f2 _  =  f2 n (x:xs) = if null xs then replicate n x else rep n x ++ f2 n xs f2 2 [1,5,9]
f3 :: RepElms f3 n = concatMap (replicate n) f3 4 [2,4]
f5 :: RepElms f5 = concatMap . replicate f5 2 [9, 10]
f6 :: RepElms f6 n arr = arr >>= replicate n f6 5 [5, 6]
Using Nested ListComps
f4 :: RepElms f4 n arr = [num | num <- arr, _ <- [1..n]] f4 3 [7, 4]