[Haskell-cafe] Issues(Bugs?) with GHC Type Families
David Menendez
dave at zednenem.com
Thu Mar 6 22:53:56 EST 2008
On Thu, Mar 6, 2008 at 9:52 PM, Ryan Ingram <ryani.spam at gmail.com> wrote:
> This is actually a general issue with the way typeclasses are defined
> in Haskell; the accepted solution is what the "Show" typeclass does:
>
>
> > class C a where
> > c :: a
> > cList :: [a]
> > cList = [c,c]
>
>
> > instance C Char where
> > c = 'a'
> > cList = "a" -- replaces instance for String above
>
> > instance C a => C [a] where
> > c = cList
> > cc = c :: String
>
> I don't really like this solution; it feels like a hack and it relies
> on knowing when you define the typeclass what sort of overlap you
> expect.
The pattern above can be thought of as a specialized version of this:
class C a where
c :: a
class ListOfC a where
listOfC :: [a]
instance (ListOfC a) => C [a] where
c = listOfC
This works for an arbitrary number of type constructors (good!), but
requires a ListOfC instance for everything you might want to put into
a list (cumbersome!).
You can make things slightly less verbose by putting a sensible
default in ListOfC,
class (C a) => ListOfC a where
listOfC :: [a]
listOfC = default_c
--
Dave Menendez <dave at zednenem.com>
<http://www.eyrie.org/~zednenem/>
More information about the Haskell-Cafe
mailing list