HsDeclStruct.hs

-------- Declarations ------------------------------------------------------

module HsDeclStruct where

import SrcLoc
import HsIdent
import HsGuardsStruct
import HsAssocStruct

-- DI
--   i      identifiers
--   e      expression recursion type
--   p      pattern recursion type
--   ds     declaration recursion type
--   t      type recursion type
--   c      context recursion type
--   tp     type pattern recursion type
-- This type seems to be full of awkward inconsistencies... /TH
data DI i e p ds t c tp
    = HsTypeDecl    SrcLoc   tp t
    | HsNewTypeDecl SrcLoc c tp (HsConDeclI i t c) {-deriving-} [i]
    | HsDataDecl    SrcLoc c tp [HsConDeclI i t c] {-deriving-} [i]
    | HsClassDecl   SrcLoc c tp (HsFunDeps i) {-where-} ds
    | HsInstDecl    SrcLoc (Maybe i) c t {-where-} ds -- optionally named
    | HsDefaultDecl SrcLoc [t]
    | HsTypeSig     SrcLoc [i] c t
    | HsFunBind     SrcLoc [HsMatchI i e p ds]
    | HsPatBind     SrcLoc p (HsRhs e) {-where-} ds 
    | HsInfixDecl   SrcLoc HsFixity [HsIdentI i] -- Haskell 98

    -- Hugs compatibility:
    | HsPrimitiveTypeDecl SrcLoc c tp -- data T a1 ... an;
    | HsPrimitiveBind     SrcLoc i t -- primitive f :: t
      deriving (Eq, Show)

data HsMatchI i e p ds
    = HsMatch SrcLoc i [p] (HsRhs e) {-where-} ds   
      deriving (Eq, Show)
  
data HsConDeclI i t c 
    = HsConDecl SrcLoc [i] c i [HsBangType t]
    | HsRecDecl SrcLoc [i] c i [([i], HsBangType t)]
      deriving (Eq, Show)   
   
data HsBangType t 
    = HsBangedType t
    | HsUnBangedType t
      deriving (Eq, Show)   

type HsFunDeps v = [HsFunDep v] -- ..., a b-> c d,f->g h, ->i, ...
type HsFunDep v = ([v],[v]) -- a b-> c d



Plain-text version of HsDeclStruct.hs | Valid HTML?