Hi Everybody,

I have a function which computes a fixed point in terms of iterate:

equivalenceClosure :: (Ord a) => Relation a -> Relation a
equivalenceClosure = fst . List.head                -- "guaranteed" to exist 
                   . List.dropWhile (uncurry (/=))  -- removes pairs that are not equal
                   . U.List.pairwise (,)            -- applies (,) to adjacent list elements
                   . iterate ( reflexivity
                             . symmetry
                             . transitivity
                             )
 
Can this function be written in terms of fix?  It seems like there should be a transformation from this scheme to something with fix in it, but I don't see it.