On 07/11/2013 07:33 PM, Vlatko Basic wrote:
Hello Cafe,

I have

     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')


Yes, (==) is a variable name in a pattern. Hence you are creating a new definition for (==) bound to the constructor argument to CF, which hides the (==) defined within the Eq type class.

Is it possible at all to compare two functions

Function types are opaque and values do not have an identity.

or how to solve this problem, to show some string for a specific function?


br,
vlatko

You could store the string alongside the function inside the data type in some way.


_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to