
Hi Maarten, On Tue, Dec 10, 2013 at 3:48 PM, Maarten Faddegon < haskell-cafe@maartenfaddegon.nl> wrote:
Dear list,
-- | Meta-information (constructor names, etc.)
instance (GToonbaar a, Constructor c) => GToonbaar (M1 i c a) where
This is not good; an instance of |Constructor c| will only be available when your |M1 i c a| is actually |M1 C c a| (so |i ~ C|). In the other cases (that is, when |i| is either |D| or |S|), that instance will not exist (there will be |Datatype| and |Selector| instances, respectively). You can find a generic show using GHC.Generics here: http://hackage.haskell.org/package/generic-deriving-1.6.2/docs/src/Generics-...
-- | Sums: encode choice between constructors instance (GToonbaar a, GToonbaar b) => GToonbaar (a :+: b) where gtoon x = gtoon x
This will cause your code to loop, btw.
When I try to compile the above, ghc emits the following error:
No instance for (Constructor Main.D1MyData) arising from a use of `Main.$gdmtoon' Possible fix: add an instance declaration for (Constructor Main.D1MyData) In the expression: (Main.$gdmtoon) In an equation for `toon': toon = (Main.$gdmtoon) In the instance declaration for `Toonbaar MyData'
It's not the most beautiful of errors, but it does say that there is no |Constructor| instance for |D1MyData|, and |D1MyData| is the automatically generated datatype to encode the *datatype* meta-information for |MyData|. Hope that helps, Pedro