On Thu, Jun 9, 2011 at 6:04 PM, Felipe Almeida Lessa <[email protected]
> wrote:

> Something like this?
>
>  equivalenceClosure = fix $ \f e ->
>    let e' = reflexivity . symmetry . transitivity $ e
>    in if e' == e then e else f e'
>
> Cheers,
>
> --
> Felipe.
>

I managed something even "clearer".  I still have very little intuition
about what's going on, but I had an aha moment -- which I promptly forgot
:0( -- and at least there's a mechanical translation from the iterate
version to the fix one.

equivalenceClosure :: (Ord a) => Relation a -> Relation a
equivalenceClosure = fix (\f -> reflexivity . symmetry . transitivity)
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to