{-% 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 :-

