On 24 May 2010 11:13, Sam Martin <sam.mar...@geomerics.com> wrote: > > Hi! > > I'm trying to work out the best way to generate (ideally derive) instances > for the Fix type. Here's a cut down example: > > data Greet x = AlloAllo x x | AuRevoir deriving Show > newtype Fix f = In { out :: f (Fix f) } -- deriving Show -- DOESN'T COMPILE
I think this is because for Fix to have a Show instance, it needs f to have a Show instance, which only works if the parameter passed to it has a Show instance, which means Fix needs to have a Show instance, etc. My guess is that the deriving tool doesn't like infinite loops... > -- workaround > instance Show (Fix Greet) where show (In i) = "In " ++ show i Are you using OverlappingInstances or something to get this to work? > In other words, given a number of parametised types that I can derive, say, > Ord, Eq and Show for, how should I go about getting the instances for the > Fix-d version of them as well? I've tried a few things, but no luck so far. Does "(==) = (==) `on` out" works for the Eq instance? -- Ivan Lazar Miljenovic ivan.miljeno...@gmail.com IvanMiljenovic.wordpress.com _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe