{-% DrIFT (Automatic class derivations for Haskell) v1.0 %-} module DTypes where import Text.XML.HaXml.Haskell2Xml hiding (Name) -- data types for a simple test program data Person = Person Name Email [Rating] Version {-! derive :Haskell2Xml !-} newtype Name = Name String {-! derive :Haskell2Xml !-} newtype Email = Email String {-! derive :Haskell2Xml !-} newtype Version = Version Int {-! derive :Haskell2Xml !-} data Rating = Rating SubjectID Interest Skill {-! derive :Haskell2Xml !-} newtype SubjectID = SubjectID Int {-! derive :Haskell2Xml !-} newtype Interest = Interest Score {-! derive :Haskell2Xml !-} newtype Skill = Skill Score {-! derive :Haskell2Xml !-} data Score = ScoreNone | ScoreLow | ScoreMedium | ScoreHigh {-! derive :Haskell2Xml !-} {-* Generated by DrIFT-v1.0 : Look, but Don't Touch. *-} instance Haskell2Xml Person where toHType v = Defined "Person" [] [Constr "Person" [] [toHType aa,toHType ab,toHType ac,toHType ad]] where (Person aa ab ac ad) = v fromContents (CElem (Elem constr [] cs):etc) | "Person" `isPrefixOf` constr = (\(aa,cs00)-> (\(ab,cs01)-> (\(ac,cs02)-> (\(ad, _)-> (Person aa ab ac ad, etc)) (fromContents cs02)) (fromContents cs01)) (fromContents cs00)) (fromContents cs) toContents v@(Person aa ab ac ad) = [mkElemC (showConstr 0 (toHType v)) (concat [toContents aa,toContents ab ,toContents ac, toContents ad])] instance Haskell2Xml Name where toHType v = Defined "Name" [] [Constr "Name" [] [toHType aa]] where (Name aa) = v fromContents (CElem (Elem constr [] cs):etc) | "Name" `isPrefixOf` constr = (\(aa,_)-> (Name aa, etc)) (fromContents cs) toContents v@(Name aa) = [mkElemC (showConstr 0 (toHType v)) (toContents aa)] instance Haskell2Xml Email where toHType v = Defined "Email" [] [Constr "Email" [] [toHType aa]] where (Email aa) = v fromContents (CElem (Elem constr [] cs):etc) | "Email" `isPrefixOf` constr = (\(aa,_)-> (Email aa, etc)) (fromContents cs) toContents v@(Email aa) = [mkElemC (showConstr 0 (toHType v)) (toContents aa)] instance Haskell2Xml Version where toHType v = Defined "Version" [] [Constr "Version" [] [toHType aa]] where (Version aa) = v fromContents (CElem (Elem constr [] cs):etc) | "Version" `isPrefixOf` constr = (\(aa,_)-> (Version aa, etc)) (fromContents cs) toContents v@(Version aa) = [mkElemC (showConstr 0 (toHType v)) (toContents aa)] instance Haskell2Xml Rating where toHType v = Defined "Rating" [] [Constr "Rating" [] [toHType aa,toHType ab,toHType ac]] where (Rating aa ab ac) = v fromContents (CElem (Elem constr [] cs):etc) | "Rating" `isPrefixOf` constr = (\(aa,cs00)-> (\(ab,cs01)-> (\(ac,_)-> (Rating aa ab ac, etc)) (fromContents cs01)) (fromContents cs00)) (fromContents cs) toContents v@(Rating aa ab ac) = [mkElemC (showConstr 0 (toHType v)) (concat [toContents aa,toContents ab ,toContents ac])] instance Haskell2Xml SubjectID where toHType v = Defined "SubjectID" [] [Constr "SubjectID" [] [toHType aa]] where (SubjectID aa) = v fromContents (CElem (Elem constr [] cs):etc) | "SubjectID" `isPrefixOf` constr = (\(aa,_)-> (SubjectID aa, etc)) (fromContents cs) toContents v@(SubjectID aa) = [mkElemC (showConstr 0 (toHType v)) (toContents aa)] instance Haskell2Xml Interest where toHType v = Defined "Interest" [] [Constr "Interest" [] [toHType aa]] where (Interest aa) = v fromContents (CElem (Elem constr [] cs):etc) | "Interest" `isPrefixOf` constr = (\(aa,_)-> (Interest aa, etc)) (fromContents cs) toContents v@(Interest aa) = [mkElemC (showConstr 0 (toHType v)) (toContents aa)] instance Haskell2Xml Skill where toHType v = Defined "Skill" [] [Constr "Skill" [] [toHType aa]] where (Skill aa) = v fromContents (CElem (Elem constr [] cs):etc) | "Skill" `isPrefixOf` constr = (\(aa,_)-> (Skill aa, etc)) (fromContents cs) toContents v@(Skill aa) = [mkElemC (showConstr 0 (toHType v)) (toContents aa)] instance Haskell2Xml Score where toHType v = Defined "Score" [] [Constr "ScoreNone" [] [],Constr "ScoreLow" [] [], Constr "ScoreMedium" [] [],Constr "ScoreHigh" [] []] fromContents (CElem (Elem constr [] cs):etc) | "ScoreNone" `isPrefixOf` constr = (ScoreNone,etc) | "ScoreLow" `isPrefixOf` constr = (ScoreLow,etc) | "ScoreMedium" `isPrefixOf` constr = (ScoreMedium,etc) | "ScoreHigh" `isPrefixOf` constr = (ScoreHigh,etc) toContents v@ScoreNone = [mkElemC (showConstr 0 (toHType v)) []] toContents v@ScoreLow = [mkElemC (showConstr 1 (toHType v)) []] toContents v@ScoreMedium = [mkElemC (showConstr 2 (toHType v)) []] toContents v@ScoreHigh = [mkElemC (showConstr 3 (toHType v)) []] -- Imported from other files :-