On Saturday September 13 2008, Han Joosten wrote: > > data Rule = RuRule > > | SgRule > > | GcRule > > | FrRule > > deriving (Eq,Show)
Here, Rule is a type constructor, whereas RuRule and others are data constructors. Just like: > data Bool = False | True The type of RuRule is Rule and is not related to the RuRule type you are defining afterwards. What you want to do is probably this: > type Rules = [Rule] > data Rule = Ru RuRule > | Sg SgRule > | Gc GcRule > | Fr FrRule > deriving (Eq,Show) > data RuRule > = RuRule { rrsrt :: Char > , rrant :: Expression > , rrfps :: FilePos > } deriving (Eq,Show) > data SgRule > = SgRule { srfps :: FilePos > , srsig :: Rule > , srxpl :: String > , srtyp :: (Concept,Concept) > } deriving (Eq,Show) ... You can now form a Rules list and use pattern matching on its members. -- Gokhan _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe