packages feed

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