Hi Tony, I stared at that specific section for at least half an hour earlier today but could not figure out how it applied in my specific case. The only examples I have see are for deriving Num. Do you have any more detail on how I could use that extension?
Kevin On Sep 8, 2:05 pm, Tony Morris <[email protected]> wrote: > I think you might want -XGeneralizedNewtypeDeriving > > http://haskell.org/ghc/docs/6.12.2/html/users_guide/deriving.html#id6... > > On 08/09/10 22:01, Kevin Jardine wrote: > > > > > I have a generic object that I want to wrap in various newtypes to > > better facilitate type checking. > > > For example, > > > newtype Blog = Blog Obj > > newtype Comment = Comment Obj > > newtype User = User Obj > > > Unlike Obj itself, whose internal structure is hidden in a library > > module, the newtype wrappings are purely to facilitate type checking. > > It is no secret that each is just a wrapper around Obj. > > > It is obvious how to construct the various wrapper objects. It is not > > so obvious how to extract the Obj they contain in a reasonably generic > > way however. What I want is a getObj function that works on all of > > them. > > > Of course this could work if someone using the library wrote an > > instance for each wrapper object: > > > instance GetObject Blog where > > getObj (Blog obj) = obj > > > but this is a pain in the neck to write for each newtype. > > > I discovered that Foldable defines a handy toList function that > > extracts content from generic Foldable structures. > > > So that I could write: > > > toObj :: Foldable thing => thing Obj -> Obj > > toObj w = head $ toList w > > > Slightly kludgy but it works. > > > Even better, recent versions of GHC will allow you to automatically > > derive Foldable. > > > Unfortunately, > > > newtype Blog = Blog Obj deriving Foldable > > > returns a kind error. > > > What does work is: > > > newtype BlogF a = Blog a deriving Foldable > > type Blog = BlogF Obj > > > After having spent close to a day on this, I am a bit baffled that > > such a seemingly trivial problem seems so hard to do. > > > I am wondering if I am missing something really, really obvious. > > > Any suggestions? Or is there perhaps a more Haskelly way to place type > > constraints on a more generic type? > > > Kevin > > _______________________________________________ > > Haskell-Cafe mailing list > > [email protected] > >http://www.haskell.org/mailman/listinfo/haskell-cafe > > -- > Tony Morrishttp://tmorris.net/ > > _______________________________________________ > Haskell-Cafe mailing list > [email protected]http://www.haskell.org/mailman/listinfo/haskell-cafe _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
