-- sq x returns the square of x sq :: Integer -> Integer sq x = x * x -- absolute x returns the absolute value of x absolute :: Integer -> Integer absolute x | x >= 0 = x absolute x | x < 0 = -x -- (alternative solution) absolute' :: Integer -> Integer absolute' x | x >= 0 = x | x < 0 = -x -- power x n returns x to the power n power :: Integer -> Integer -> Integer power x 0 = 1 power x n | n > 0 = x * power x (n-1) -- repli n s returns n copies of s as a string repli :: Integer -> String -> String repli 0 s = "" repli n s | n > 0 = s ++ repli (n-1) s -- regions n computes the number of regions formed by n lines regions :: Integer -> Integer regions 0 = 1 regions n | n > 0 = regions (n-1) + n -- group n xs divides xs up into groups of length n group :: Int -> String -> [String] group n "" = [] group n s = [take n s] ++ group n (drop n s)