packages feed

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 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