[Haskell-cafe] Best way to instance Fix?

Ivan Miljenovic ivan.miljenovic at gmail.com
Sun May 23 21:24:24 EDT 2010


On 24 May 2010 11:13, Sam Martin <sam.martin at 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.Miljenovic at gmail.com
IvanMiljenovic.wordpress.com


More information about the Haskell-Cafe mailing list