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