{-# LANGUAGE NamedFieldPuns #-} module Language.Bond.Codegen.Haskell.AliasDecl ( aliasDecl ) where import Language.Bond.Syntax.Types import Language.Bond.Codegen.TypeMapping (MappingContext(..)) import Language.Bond.Codegen.Haskell.Util import Language.Haskell.Exts hiding (mode) import Language.Haskell.Exts.SrcLoc (noLoc) aliasDecl :: CodegenOpts -> MappingContext -> ModuleName -> Declaration -> Maybe Module aliasDecl opts ctx moduleName decl@Alias{} = Just source where source = Module noLoc moduleName [ ] Nothing Nothing imports [synonymDecl] typeName = mkType $ makeDeclName decl typeParams = map (\TypeParam{paramName} -> UnkindedVar $ mkVar paramName) (declParams decl) typeDecl = hsType (setType opts) ctx $ aliasType decl imports = map makeImport $ unique $ getTypeModules typeDecl makeImport m | m == internalModuleAlias = importInternalModule | otherwise = importTemplate{importModule = m} synonymDecl = TypeDecl noLoc typeName typeParams typeDecl aliasDecl _ _ _ _ = error "aliasDecl called for invalid type"