alloy 1.1.0 → 1.2.0
raw patch · 2 files changed
+64/−3 lines, 2 filesdep +vectorPVP ok
version bump matches the API change (PVP)
Dependencies added: vector
API changes (from Hackage documentation)
+ Data.Generics.Alloy.GenInstances: genVectorInstance :: Data v => v -> GenInstance
+ Data.Generics.Alloy.GenInstances: instanceImportsVector :: [String]
Files
- Data/Generics/Alloy/GenInstances.hs +62/−1
- alloy.cabal +2/−2
Data/Generics/Alloy/GenInstances.hs view
@@ -62,8 +62,9 @@ -- package on Hackage for more details. module Data.Generics.Alloy.GenInstances (writeInstances, writeInstancesTo,- justPure, allInstances, instanceImports, instanceImportsMapSet,+ justPure, allInstances, instanceImports, instanceImportsMapSet, instanceImportsVector, GenInstance, genInstance, genMapInstance, genSetInstance, genInstances, languageExtras,+ genVectorInstance, GenOverlappedOption(..), GenClassOption(GenOneClass), GenInstanceConfig(..)) where import Control.Monad.State@@ -74,8 +75,10 @@ import qualified Data.Map as Map import Data.Ord import Data.Set (Set)+import Data.Vector (Vector) import qualified Data.Set as Set import qualified Data.Typeable as Ty+import qualified Data.Vector as Vector #if __GLASGOW_HASKELL__ < 702 type TypeRepKey = Int@@ -255,6 +258,56 @@ where s :: Set a s = undefined++-- | Generates an instance for the 'Data.Vector.Vector' type. Like+-- 'Data.Map.Map', the Data instance for Vector hides its representation.+genVectorInstance :: forall v. (Data v) => v -> GenInstance+genVectorInstance v = GenInstance $ do+ findTypesIn (const Nothing) v+ tk <- liftIO $ typeKey m+ modify $ Map.insert tk $ (,) (toQualName m)+ $ Detailed (DataBox m) [DataBox v]+ $ \ cl (funcSameType, funcNewType) -> concat+ [ case cl of+ ClassAlloyARoute -> map concat+ [ [ funcSameType b+ , " _ ops (v, r) = let mns = zip (Vector.toList v) (map ((r @->) . routeDataMap) [0..]) in"+ ]+ , [ " "+ , funcPlain b+ , " Vector.fromList "+ , funcAp b+ , " ("+ , funcTraverse b+ , " ("+ , funcNewType b+ , " ops BaseOpARoute) mns)"+ ]+ ]+ _ -> ((:[]) . concat)+ [ funcSameType b+ , " _ ops v = "+ , funcPlain b+ , " Vector.fromList "+ , funcAp b+ , " ("+ , funcTraverse b+ , " ("+ , funcNewType b+ , " ops "+ , terminator+ , ") (Vector.toList v))"+ ]+ where+ terminator = case cl of+ ClassAlloyA -> "BaseOpA"+ ClassAlloy -> "BaseOp"++ | b <- funcsForClass cl+ ]+ where+ m :: Vector v+ m = undefined -- Explanation of Alloy's instances: --@@ -592,6 +645,14 @@ ,"Data.Set(Set)", "qualified Data.Set as Set" ,"qualified Data.Traversable as T" ]++-- | Like 'instanceImportsMapSet' but for 'Data.Vector.Vector'.+instanceImportsVector :: [String]+instanceImportsVector = instanceImports ++ map ("import " ++)+ [ "Data.Vector (Vector)"+ , "qualified Data.Vector as Vector"+ , "qualified Data.Traversable as T"+ ] -- | Generates all the given instances (eliminating any duplicates) -- with the given options. The return is a list of lines of code. This should
alloy.cabal view
@@ -1,5 +1,5 @@ Name: alloy-Version: 1.1.0+Version: 1.2.0 License: BSD3 License-File: LICENSE Author: Neil Brown and Adam Sampson@@ -30,7 +30,7 @@ tutorial/Selective.lhs Library- Build-Depends: base >= 4.3 && < 5, containers, mtl, syb+ Build-Depends: base >= 4.3 && < 5, containers, mtl, syb, vector Exposed-modules: Data.Generics.Alloy Data.Generics.Alloy.Effect