Este algoritmo apoia-se numa função auxiliar que insere um elemento numa lista já ordenada.

insert :: (Ord a) => a -> [a] -> [a]
insert x [] = [x]
insert x (y:ys) | x<=y = x:y:ys
                | otherwise = y : insert x ys

--Exemplo:
insert 7 [2,5,9]
		= 2 : insert 7 [5,9]
		= 2 : 5 : insert 7 [9]
		= 2:5:7:9:[]
		= [2,5,7,9]

A função de ordenação da lista define-se por casos :

isort :: (Ord a) => [a] -> [a]
isort [] = []
isort (x:xs) = insert x (isort xs)

--Exemplo:
isort [4,7,2] = insert 4 (isort [7,2])
							= insert 4 (insert 7 (isort [2]))
							= insert 4 (insert 7 (insert 2 (isort [])))
							= insert 4 (insert 7 (insert 2 []))
							= insert 4 (insert 7 [2]) = …
							= insert 4 [2,7] = … = [2,4,7]