bond-haskell-compiler 0.1.3.0 → 0.1.3.1
raw patch · 5 files changed
+42/−10 lines, 5 filesdep ~haskell-src-extsPVP: minor bump suggested
API additions: PVP suggests at least a minor version bump
Dependency ranges changed: haskell-src-exts
API changes (from Hackage documentation)
+ Language.Bond.Codegen.Haskell.AliasDecl: aliasDecl :: CodegenOpts -> MappingContext -> ModuleName -> Declaration -> Maybe Module
+ Language.Bond.Codegen.Haskell.Util: getTypeModules :: Type -> [ModuleName]
Files
- bond-haskell-compiler.cabal +4/−3
- src/Language/Bond/Codegen/Haskell/AliasDecl.hs +29/−0
- src/Language/Bond/Codegen/Haskell/Decl.hs +2/−0
- src/Language/Bond/Codegen/Haskell/StructDecl.hs +0/−6
- src/Language/Bond/Codegen/Haskell/Util.hs +7/−1
bond-haskell-compiler.cabal view
@@ -1,5 +1,5 @@ name: bond-haskell-compiler-version: 0.1.3.0+version: 0.1.3.1 synopsis: Bond code generator for Haskell description: Bond is a cross-platform framework for handling schematized data. It supports cross-language de/serialization and@@ -22,7 +22,8 @@ library hs-source-dirs: src- exposed-modules: Language.Bond.Codegen.Haskell.Decl+ exposed-modules: Language.Bond.Codegen.Haskell.AliasDecl+ Language.Bond.Codegen.Haskell.Decl Language.Bond.Codegen.Haskell.EnumDecl Language.Bond.Codegen.Haskell.SchemaDecl Language.Bond.Codegen.Haskell.StructDecl@@ -31,7 +32,7 @@ build-depends: base >= 4.7 && < 5 , bond >= 0.4.1.0 && < 0.4.2.0 , filepath >= 1.0- , haskell-src-exts >= 1.16+ , haskell-src-exts >= 1.16 && < 1.18 default-language: Haskell2010 executable hbc
+ src/Language/Bond/Codegen/Haskell/AliasDecl.hs view
@@ -0,0 +1,29 @@+{-# 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"
src/Language/Bond/Codegen/Haskell/Decl.hs view
@@ -8,6 +8,7 @@ import Language.Bond.Syntax.Types import Language.Bond.Codegen.TypeMapping (MappingContext)+import Language.Bond.Codegen.Haskell.AliasDecl import Language.Bond.Codegen.Haskell.EnumDecl import Language.Bond.Codegen.Haskell.StructDecl import Language.Bond.Codegen.Haskell.Util@@ -40,6 +41,7 @@ code = case decl of Enum{} -> enumDecl opts ctx modName decl Struct{} -> structDecl opts ctx modName decl+ Alias{} -> aliasDecl opts ctx modName decl _ -> Nothing hsModule = capitalize (makeDeclName decl) hsNamespaces = map capitalize $ getNamespace ctx
src/Language/Bond/Codegen/Haskell/StructDecl.hs view
@@ -16,12 +16,6 @@ baseStructField :: Name baseStructField = Ident "base'" -getTypeModules :: Language.Haskell.Exts.Type -> [ModuleName]-getTypeModules (TyCon (Qual moduleName _)) = [moduleName]-getTypeModules (TyApp t1 t2) = getTypeModules t1 ++ getTypeModules t2-getTypeModules (TyList t) = getTypeModules t-getTypeModules _ = []- defaultFieldValue :: MappingContext -> Language.Bond.Syntax.Types.Field -> FieldUpdate defaultFieldValue ctx f@Field{fieldType, fieldDefault} = FieldUpdate (UnQual $ mkVar $ makeFieldName f) (defValue fieldDefault)
src/Language/Bond/Codegen/Haskell/Util.hs view
@@ -143,17 +143,23 @@ hsType s c (BT_Map key value) = TyApp (TyApp (implType "Map") (hsType s c key)) (hsType s c value) hsType s c (BT_Bonded type_) = TyApp (implType "Bonded") (hsType s c type_) hsType _ _ (BT_TypeParam type_) = TyVar $ mkVar $ paramName type_-hsType _ _ (BT_UserDefined Alias{} _) = error "BT_UserDefined Alias" hsType s c (BT_UserDefined decl params) = foldl1 TyApp $ declType : map (hsType s c) params where declType = let ns = getDeclNamespace c decl typename = declName decl in TyCon $ Qual (mkModuleName ns typename) (mkType typename) +getTypeModules :: Language.Haskell.Exts.Type -> [ModuleName]+getTypeModules (TyCon (Qual moduleName _)) = [moduleName]+getTypeModules (TyApp t1 t2) = getTypeModules t1 ++ getTypeModules t2+getTypeModules (TyList t) = getTypeModules t+getTypeModules _ = []+ proxyOf :: Language.Haskell.Exts.Type -> Exp proxyOf = ExpTypeSig noLoc (Con $ implQual "Proxy") . TyApp (TyCon $ implQual "Proxy") makeDeclName :: Declaration -> String+makeDeclName decl@Alias{} = declName decl makeDeclName decl = overrideName (declName decl) (declAttributes decl) makeFieldName :: Field -> String