Type patterns in Haskell
        Posted  
        
            by finnsson
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by finnsson
        
        
        
        Published on 2010-04-18T09:20:57Z
        Indexed on 
            2010/04/18
            9:23 UTC
        
        
        Read the original article
        Hit count: 316
        
I'm trying to compile a simple example of generic classes / type patterns (see http://www.haskell.org/ghc/docs/latest/html/users_guide/generic-classes.html) in Haskell but it won't compile. Any ideas about what's wrong with the code would be helpful.
According to the documentation there should be a module Generics with the data types Unit, :*:, and :+: but ghc (6.12.1) complaints about Not in scope: data constructor 'Unit' etc.
It seems like there's a package instant-generics with the data types :*:, :+: and U but when I import that module (instead of Generics) I get the error
Illegal type pattern in the generic bindings
    {myPrint _ = ""}
The complete source code is
import Generics.Instant
class MyPrint a where
  myPrint :: a -> String
  myPrint {| U |} _ = "" 
  myPrint {| a :*: b |} (x :*: y) = "" (show x) ++ ":*:" ++ (show y)
  myPrint {| a :+: b |} _ = ""
data Foo = Foo String
instance MyPrint a => MyPrint a
main = myPrint $ Foo "hi"
and I compile it using
ghc --make Foo.hs -fglasgow-exts -XGenerics -XUndecidableInstances
P.S. The module Generics export no data types, only the functions:
canDoGenerics
mkGenericRhs
mkTyConGenericBinds
validGenericInstanceType
validGenericMethodType
© Stack Overflow or respective owner