[Haskell-cafe] Comparing functions

Brandon Allbery allbery.b at gmail.com
Thu Jul 11 19:50:06 CEST 2013


On Thu, Jul 11, 2013 at 1:33 PM, Vlatko Basic <vlatko.basic at gmail.com>wrote:

>     data CmpFunction a = CF (a -> a -> Bool)
>
> that contains comparing functions, like ==, <, > ..., and I'm trying to
> declare the Show instance for it like this
>
>     instance Show (CmpFunction a) where
>       show (CF (==)) = "== "                   -- no good
>       show f = case f of                            -- no good also
>                        CBF (==) -> "=="
>                         _ -> "Other"
>
> but compiler complains for both with
>
> This binding for `==' shadows the existing binding
>            imported from `Prelude' at src/Main.hs:6:8-11
>            (and originally defined in `ghc-prim:GHC.Classes')
>

The problem here isn't quite what you think it is; (==) is not a
constructor, therefore it is a *variable*. It's exactly the same problem as

    a = 5
    -- ...
    foo a = 3 -- this does NOT compare with the previous value of "a"; it's
identical to the next line!
    foo x = x

Just as with the above, the normal way to do it would be to use a guard...
but functions don't have an Eq instance, and *can't* have one. How do you
meaningfully compare them? And for a typeclass function like (==), do you
want (==) instantiated for Int to compare equal to (==) instantiated for
Integer? Does a native-compiled function compare equal to an interpreted
function? Remember referential transparency; the concept of comparing
pointers used in some languages is not applicable to Haskell.

-- 
brandon s allbery kf8nh                               sine nomine associates
allbery.b at gmail.com                                  ballbery at sinenomine.net
unix, openafs, kerberos, infrastructure, xmonad        http://sinenomine.net
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20130711/b1720d42/attachment.htm>


More information about the Haskell-Cafe mailing list