Did someone actually try compiling this? Here are the results:

data State a
    = Start
    | Stop
    | (Show a, Eq a) => State a
    deriving Show

foo.hs:1:5:
    Can't make a derived instance of `Show (State a)'
    (`State' has existentially-quantified constructor(s))
    When deriving instances for type `State'

I do not want to do it the way Tomasz and John are suggesting below.
I need the user of my library to supply their own a and be able
to pattern match on it. In the library itself I just need Show and Eq a.

The following does the trick (compiles, works) but sucks in its verbosity:

data State a
    = Start
    | Stop
    | (Show a, Eq a) => State a

instance Eq a => Eq (State a) where
    (State a) == (State b) = a == b
    Start == Start = True
    Stop == Stop = True
    _ == _ = False

instance Show a => Show (State a) where
    show (State a) = show a
    show Start = "Start"
    show Stop = "Stop"

On Dec 8, 2005, at 8:36 AM, John Meacham wrote:

On Thu, Dec 08, 2005 at 09:13:10AM +0100, Tomasz Zielonka wrote:
Shouldn't it be:

data State
    = Start
    | Stop
    | forall a . (Show a, Eq a) => State a

ah. you are right. my bad.

--
http://wagerlabs.com/





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

Reply via email to