module Language.Haskell.DTC.DataInfo
( DataInfo (..)
, dataInfo
, moduleDataInfo
) where
import Language.Haskell.Exts
import Data.Maybe
import Language.Haskell.DTC.Mod
data DataInfo =
DataInfo { dataName :: Name
, consList :: [ (Name , Int) ]
, rconsList :: [ (Name , [Name]) ]
} deriving Show
dataInfo :: Decl -> Maybe DataInfo
dataInfo (DataDecl _ _ _ name _ xs _) = Just $
DataInfo name (mapMaybe (consName . fromConDecl) xs) (mapMaybe (rconsName . fromConDecl) xs)
where
fromConDecl (QualConDecl _ _ _ x) = x
consName (ConDecl n ys) = Just (n , length ys)
consName _ = Nothing
rconsName (RecDecl n ys) = Just (n , map (head . fst) ys)
rconsName _ = Nothing
dataInfo _ = Nothing
moduleDataInfo :: Module -> [DataInfo]
moduleDataInfo (Module _ _ _ _ _ _ decls) = mapMaybe dataInfo decls