Преобразование функции, которая вычисляет фиксированную точку

У меня есть функция, которая вычисляет фиксированную точку в терминах итерации:

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
                             )

Обратите внимание, что мы можем абстрагироваться от этого до:

findFixedPoint :: (a -> a) -> a -> a
findFixedPoint f = fst . List.head
                 . List.dropWhile (uncurry (/=))  -- dropWhile we have not reached the fixed point
                 . U.List.pairwise (,)            -- applies (,) to adjacent list elements
                 . iterate
                 $ f

Можно ли записать эту функцию в терминах исправить? Вроде должно быть преобразование этой схемы во что-то с исправлением в ней, но я этого не вижу.

10
задан duplode 7 July 2019 в 00:35
поделиться