It looks like you're new here. If you want to get involved, click one of these buttons!
A hylomorphism is the composite of an anamorphism and a catamorphism – the idea is that the anamorphism unfolds a data structure, and the catamorphism refolds it in some convenient way. One application of this idea is to the implementation of sorting algorithms.
In this question, we implement merge sort using a hylomorphism. Here’s the idea: The seed (the carrier of the coalgebra) is the list to be sorted. Use this function
split :: [a] -> ([a], [a])
split (a: b: t) = (a: t1, b: t2)
(t1, t2) = split t split l = (l, )
to split the list into two lists and use them as new seeds. Make sure you know how to deal with empty lists.
The carrier of the algebra is again a list (this time it’s actually a sorted list, but this cannot be reflected in the type). Your partial results are sorted lists. You combine them using this function.
merge :: Ord a => [a] -> [a] -> [a]
merge (a: as) (b: bs) =
if a <= b
then a : merge as (b: bs)
else b : merge (a: as) bs
merge as  = as
merge  bs = bs
Make sure your program also works for empty lists (it should return an empty list).