module Main using (Ord a, Num n) isort : List a -> List a isort [] = [] isort (x :: xs) = insert x (isort xs) where -- insert : a -> List a -> List a insert x [] = [x] insert x (y :: ys) = if x < y then x :: y :: ys else y :: insert x ys msum : Num n => List n -> n msum [] = 0 msum (x :: xs) = x + msum xs mprod : List n -> n mprod [] = 1 mprod (x :: xs) = x * mprod xs main : IO () main = do printLn $ isort [1,5,3,5,1,9,8] printLn $ msum [1..10] printLn $ mprod [1..10]