circ 0.0.1 → 0.0.2
raw patch · 2 files changed
+13/−12 lines, 2 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
+ Language.CIRC: type Import = String
+ Language.CIRC: type ModuleName = String
- Language.CIRC: Transform :: ModuleName -> [Import] -> [Import] -> CtorName -> (ModuleName -> Code) -> [TypeRefinement] -> Transform
+ Language.CIRC: Transform :: ModuleName -> [Import] -> [Import] -> [(CtorName, ModuleName -> Code)] -> [TypeRefinement] -> Transform
Files
- Language/CIRC.hs +12/−11
- circ.cabal +1/−1
Language/CIRC.hs view
@@ -9,10 +9,12 @@ , CtorDef (..) , TypeRefinement (..) , Name+ , ModuleName , CtorName , TypeName , TypeParam , Code+ , Import , t , indent -- * CIRC Compilation@@ -53,7 +55,7 @@ -- | A transform is a module name, the constructor to be transformed, a list of new type definitions, -- and the implementation (imports and code).-data Transform = Transform ModuleName [Import] [Import] CtorName (ModuleName -> Code) [TypeRefinement]+data Transform = Transform ModuleName [Import] [Import] [(CtorName, ModuleName -> Code)] [TypeRefinement] -- | An unparameterized type. t :: String -> Type@@ -69,7 +71,7 @@ typeDefs = sortTypeDefs typeDefsUnsorted codeTransform :: (Name, [TypeDef]) -> Transform -> IO (Name, [TypeDef])- codeTransform (prevModuleName, prevTypeDefs) (Transform moduleName typeImports transImports ctorName transCode typeRefinements) = do+ codeTransform (prevModuleName, prevTypeDefs) (Transform moduleName typeImports transImports removedCtors typeRefinements) = do maybeWriteFile (moduleName ++ ".hs") $ codeTypeModule moduleName typeImports typeDefs maybeWriteFile (moduleName ++ "Trans.hs") $ codeTransModule initModuleName@@ -79,12 +81,11 @@ moduleName transImports typeDefs- ctorName- (transCode prevModuleName)+ [ (name, code prevModuleName) | (name, code) <- removedCtors ] [ (ctorName, transCode prevModuleName) | NewCtor _ (CtorDef ctorName _) transCode <- typeRefinements ] return (moduleName, typeDefs) where- filteredCtor = [ TypeDef name params [ CtorDef ctorName' args | CtorDef ctorName' args <- ctors, ctorName /= ctorName' ] | TypeDef name params ctors <- prevTypeDefs ]+ filteredCtor = [ TypeDef name params [ CtorDef ctorName args | CtorDef ctorName args <- ctors, notElem ctorName $ fst $ unzip removedCtors ] | TypeDef name params ctors <- prevTypeDefs ] typeDefs = sortTypeDefs $ filterRelevantTypes rootTypeName $ nextTypes filteredCtor typeRefinements -- | Write out a file if the file doesn't exist or is different. Doesn't bump the timestamp for Makefile-like build systems.@@ -150,8 +151,8 @@ ] -- | Code the module that contains the IR transformations.-codeTransModule :: ModuleName -> TypeName -> ModuleName -> [TypeDef] -> ModuleName -> [Import] -> [TypeDef] -> CtorName -> Code -> [(CtorName, Code)] -> String-codeTransModule initModuleName rootTypeName prevModuleName prevTypeDefs moduleName imports typeDefs ctorName transCode backwardTransCode = unlines $+codeTransModule :: ModuleName -> TypeName -> ModuleName -> [TypeDef] -> ModuleName -> [Import] -> [TypeDef] -> [(CtorName, Code)] -> [(CtorName, Code)] -> String+codeTransModule initModuleName rootTypeName prevModuleName prevTypeDefs moduleName imports typeDefs transCode backwardTransCode = unlines $ [ printf "module %sTrans" moduleName , " ( transform" , " , transform'"@@ -175,15 +176,15 @@ , printf "transform' :: %s -> CIRC %s.%s" rootTypeName initModuleName rootTypeName , printf "transform' a = trans%s' a >>= %sTrans.transform'" rootTypeName prevModuleName , printf ""- , codeTypeTransforms prevModuleName prevTypeDefs typeDefs (ctorName, transCode) backwardTransCode+ , codeTypeTransforms prevModuleName prevTypeDefs typeDefs transCode backwardTransCode , printf "" ] -- | Codes the type transform function.-codeTypeTransforms :: ModuleName -> [TypeDef] -> [TypeDef] -> (CtorName, Code) -> [(CtorName, Code)] -> String+codeTypeTransforms :: ModuleName -> [TypeDef] -> [TypeDef] -> [(CtorName, Code)] -> [(CtorName, Code)] -> String codeTypeTransforms prevName prevTypes currTypes forwardTrans backwardTrans =- concatMap (codeTypeTransform prevTypes [forwardTrans] (\ t -> "trans" ++ t) qualified id) [ t | t@(TypeDef n _ _) <- prevTypes, elem n $ map typeDefName currTypes ] ++- concatMap (codeTypeTransform currTypes backwardTrans (\ t -> "trans" ++ t ++ "'") id qualified) [ t | t@(TypeDef n _ _) <- currTypes, elem n $ map typeDefName prevTypes ]+ concatMap (codeTypeTransform prevTypes forwardTrans (\ t -> "trans" ++ t) qualified id) [ t | t@(TypeDef n _ _) <- prevTypes, elem n $ map typeDefName currTypes ] +++ concatMap (codeTypeTransform currTypes backwardTrans (\ t -> "trans" ++ t ++ "'") id qualified) [ t | t@(TypeDef n _ _) <- currTypes, elem n $ map typeDefName prevTypes ] where typeDefName (TypeDef n _ _) = n qualified :: String -> String
circ.cabal view
@@ -1,5 +1,5 @@ name: circ-version: 0.0.1+version: 0.0.2 synopsis: A Compiler IR Compiler. description: A Compiler IR Compiler. license: BSD3