packages feed

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