{- | Define selectors for tuples with elements of complicated type -} module PreImp where import ImportState(ImportState) import TokenId(TokenId) import Syntax(Simple,Type,Context,Constr) import Util.Extra(Pos) type HideDeclType = ImportState -> (Int,Bool) -- depth annotation -> Simple TokenId -- LHS of synonym -> Type TokenId -- RHS of synonym -> ImportState type HideDeclData = ImportState -> Either Bool Bool -- unboxed? -> [Context TokenId] -- class contexts -> Simple TokenId -- LHS of data decl -> [Constr TokenId] -- constructors -> [[TokenId]] -- `needs' = actually exported -> [(Pos,TokenId)] -- `deriving' classes -> ImportState type HideDeclDataPrim = ImportState -> (Pos,TokenId) -> Int -> ImportState type HideDeclClass = ImportState -> [Context TokenId] -- class contexts -> (Pos,TokenId) -- class name -> [(Pos,TokenId)] -- type variables -> [([((Pos,TokenId),Maybe Int)] ,[Context TokenId] ,Type TokenId )] -- methods -> [[TokenId]] -- `needs' = actually exported -> ImportState type HideDeclInstance = ImportState -> (Pos,TokenId) -- parent module -> [Context TokenId] -- class contexts -> (Pos,TokenId) -- class name -> [Type TokenId] -- types of this instance -> ImportState type HideDeclVarsType = ImportState -> [((Pos,TokenId),Maybe Int)] -> [Context TokenId] -> Type TokenId -> ImportState type HideDeclIds = (HideDeclType,HideDeclData,HideDeclDataPrim ,HideDeclClass,HideDeclInstance,HideDeclVarsType) -- Keep these selectors in sync with the tuple built by mkNeed in PreImport hType :: HideDeclIds -> HideDeclType hType (hideDeclType,_,_,_,_,_) = hideDeclType hData :: HideDeclIds -> HideDeclData hData (_,hideDeclData,_,_,_,_) = hideDeclData hDataPrim :: HideDeclIds -> HideDeclDataPrim hDataPrim (_,_,hideDeclDataPrim,_,_,_) = hideDeclDataPrim hClass :: HideDeclIds -> HideDeclClass hClass (_,_,_,hideDeclClass,_,_) = hideDeclClass hInstance :: HideDeclIds -> HideDeclInstance hInstance (_,_,_,_,hideDeclInstance,_) = hideDeclInstance hVarsType :: HideDeclIds -> HideDeclVarsType hVarsType (_,_,_,_,_,hideDeclVarsType) = hideDeclVarsType -- Keep these selectors in sync with the tuple built by is2rs in RenameLib sLG :: (a, b, c, d) -> a sQual :: (a, b, c, d) -> b sExp :: (a, b, c, d) -> c sFix :: (a, b, c, d) -> d sLG (localGlobal,qualFun,expFun,fixFun) = localGlobal sQual (localGlobal,qualFun,expFun,fixFun) = qualFun sExp (localGlobal,qualFun,expFun,fixFun) = expFun sFix (localGlobal,qualFun,expFun,fixity) = fixity