generic-accessors 0.5.0.0 → 0.5.1.0
raw patch · 3 files changed
+53/−1 lines, 3 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Accessors: instance (Accessors.Lookup a, Accessors.Lookup b) => Accessors.Lookup (a, b)
+ Accessors: instance (Accessors.Lookup a, Accessors.Lookup b, Accessors.Lookup c) => Accessors.Lookup (a, b, c)
+ Accessors: instance (Accessors.Lookup a, Accessors.Lookup b, Accessors.Lookup c, Accessors.Lookup d) => Accessors.Lookup (a, b, c, d)
Files
- CHANGELOG.md +4/−0
- generic-accessors.cabal +1/−1
- src/Accessors.hs +48/−0
CHANGELOG.md view
@@ -1,3 +1,7 @@+0.5.1.0+---+* Add tuple instances+ 0.5.0.0 --- * Use lenses intead of hand-rolled Getter/Setters
generic-accessors.cabal view
@@ -1,5 +1,5 @@ name: generic-accessors-version: 0.5.0.0+version: 0.5.1.0 synopsis: stringly-named getters for generic data license: BSD3 license-file: LICENSE
src/Accessors.hs view
@@ -162,6 +162,54 @@ m1m1Lens :: Lens' (D1 d (C1 c f) p) (f p) m1m1Lens f y = fmap (M1 . M1) (f (unM1 (unM1 y))) +-- tuple instances+instance (Lookup a, Lookup b) => Lookup (a, b) where+ toAccessorTree lens0 =+ Data ("(,)", "(,)")+ [ ("(x,_)", toAccessorTree (lens0 . lens1))+ , ("(_,x)", toAccessorTree (lens0 . lens2))+ ]+ where+ lens1 :: Lens' (a, b) a+ lens1 f (x, y) = fmap (\x' -> (x', y)) (f x)+ lens2 :: Lens' (a, b) b+ lens2 f (x, y) = fmap (\y' -> (x, y')) (f y)++instance (Lookup a, Lookup b, Lookup c) => Lookup (a, b, c) where+ toAccessorTree lens0 =+ Data ("(,,)", "(,,)")+ [ ("(x,_,_)", toAccessorTree (lens0 . lens1))+ , ("(_,x,_)", toAccessorTree (lens0 . lens2))+ , ("(_,_,x)", toAccessorTree (lens0 . lens3))+ ]+ where+ lens1 :: Lens' (a, b, c) a+ lens1 f (x, y, z) = fmap (\x' -> (x', y, z)) (f x)+ lens2 :: Lens' (a, b, c) b+ lens2 f (x, y, z) = fmap (\y' -> (x, y', z)) (f y)+ lens3 :: Lens' (a, b, c) c+ lens3 f (x, y, z) = fmap (\z' -> (x, y, z')) (f z)++instance (Lookup a, Lookup b, Lookup c, Lookup d) => Lookup (a, b, c, d) where+ toAccessorTree lens0 =+ Data ("(,,,)", "(,,,)")+ [ ("(x,_,_,_)", toAccessorTree (lens0 . lens1))+ , ("(_,x,_,_)", toAccessorTree (lens0 . lens2))+ , ("(_,_,x,_)", toAccessorTree (lens0 . lens3))+ , ("(_,_,_,x)", toAccessorTree (lens0 . lens4))+ ]+ where+ lens1 :: Lens' (a, b, c, d) a+ lens1 f (x, y, z, w) = fmap (\x' -> (x', y, z, w)) (f x)+ lens2 :: Lens' (a, b, c, d) b+ lens2 f (x, y, z, w) = fmap (\y' -> (x, y', z, w)) (f y)+ lens3 :: Lens' (a, b, c, d) c+ lens3 f (x, y, z, w) = fmap (\z' -> (x, y, z', w)) (f z)+ lens4 :: Lens' (a, b, c, d) d+ lens4 f (x, y, z, w) = fmap (\w' -> (x, y, z, w')) (f w)+++ -- some instance from linear instance Lookup a => Lookup (Linear.V0 a) where toAccessorTree _ =