module DerivingDrift.DataP where

import Name.Name(Name)
import FrontEnd.HsSyn

data Statement = DataStmt | NewTypeStmt
    deriving (Eq,Show)

data Data = D {
    name :: Name,		-- type name
    constraints :: [(Class,Var)],
    vars :: [Var],		-- Parameters
    body :: [Body],
    derives :: [Class],		-- derived classes
    statement :: Statement
    } deriving (Eq,Show)

data Body = Body {
    constructor :: Constructor,
    labels :: [Name],
    types :: [HsBangType]
    } deriving (Eq,Show)

type Var = String
type Class = String
type Constructor = String