inssortBy :: (a -> b) -> [Int] -> [Int] inssortBy _ [] = [] inssortBy f (a:xs) = insertBy f a (inssortBy xs) insertBy :: (a -> b) -> Int -> [Int] -> [Int] insertBy _ a [] = [a] insertBy f a (x:xs) | f a < f x = a:x:xs | otherwise = x : insertBy f a xs