optics-extra 0.3 → 0.4
raw patch · 20 files changed
+142/−163 lines, 20 filesdep +indexed-traversable-instancesdep ~arraydep ~basedep ~containers
Dependencies added: indexed-traversable-instances
Dependency ranges changed: array, base, containers, optics-core, text
Files
- CHANGELOG.md +3/−0
- optics-extra.cabal +8/−7
- src/Data/ByteString/Lazy/Optics.hs +3/−2
- src/Data/ByteString/Optics.hs +4/−4
- src/Data/ByteString/Strict/Optics.hs +5/−4
- src/Data/HashMap/Optics.hs +3/−2
- src/Data/HashSet/Optics.hs +4/−3
- src/Data/Text/Lazy/Optics.hs +12/−8
- src/Data/Text/Optics.hs +4/−4
- src/Data/Text/Strict/Optics.hs +9/−8
- src/Data/Vector/Generic/Optics.hs +14/−14
- src/Data/Vector/Optics.hs +4/−3
- src/Optics/At.hs +18/−16
- src/Optics/Cons.hs +1/−1
- src/Optics/Each.hs +8/−7
- src/Optics/Empty.hs +13/−11
- src/Optics/Extra/Internal/Zoom.hs +4/−10
- src/Optics/Indexed.hs +1/−36
- src/Optics/Passthrough.hs +2/−2
- src/Optics/Zoom.hs +22/−21
CHANGELOG.md view
@@ -1,3 +1,6 @@+# optics-extra-0.4 (2021-02-22)+* Add support for GHC-9.0+ # optics-extra-0.3 (2020-04-15) * `optics-core-0.3` compatible release * GHC-8.10 support
optics-extra.cabal view
@@ -1,12 +1,12 @@ name: optics-extra-version: 0.3+version: 0.4 license: BSD3 license-file: LICENSE build-type: Simple cabal-version: 1.24 maintainer: optics@well-typed.com author: Andrzej Rybczak-tested-with: ghc ==8.0.2 || ==8.2.2 || ==8.4.4 || ==8.6.5 || ==8.8.3 || ==8.10.1, GHCJS ==8.4+tested-with: ghc ==8.2.2 || ==8.4.4 || ==8.6.5 || ==8.8.4 || ==8.10.3, GHCJS ==8.4 synopsis: Extra utilities and instances for optics-core category: Data, Optics, Lenses description:@@ -30,18 +30,19 @@ hs-source-dirs: src ghc-options: -Wall - build-depends: base >= 4.9 && <5- , array >= 0.5.1.1 && <0.6- , bytestring >= 0.10.8 && <0.11- , containers >= 0.5.7.1 && <0.7+ build-depends: base >= 4.10 && <5+ , array >= 0.5.2.0 && <0.6+ , bytestring >= 0.10.8 && <0.12+ , containers >= 0.5.10.2 && <0.7 , hashable >= 1.1.1 && <1.4 , indexed-profunctors >= 0.1 && <0.2 , mtl >= 2.2.2 && <2.3- , optics-core >= 0.3 && <0.3.1+ , optics-core >= 0.4 && <0.4.1 , text >= 1.2 && <1.3 , transformers >= 0.5 && <0.6 , unordered-containers >= 0.2.6 && <0.3 , vector >= 0.11 && <0.13+ , indexed-traversable-instances >=0.1 && <0.2 exposed-modules: Optics.Extra
src/Data/ByteString/Lazy/Optics.hs view
@@ -8,8 +8,9 @@ , pattern Chars ) where -import Data.ByteString.Lazy as Words-import Data.ByteString.Lazy.Char8 as Char8+import Data.ByteString.Lazy (ByteString)+import qualified Data.ByteString.Lazy as Words+import qualified Data.ByteString.Lazy.Char8 as Char8 import Data.Int (Int64) import Data.Word (Word8)
src/Data/ByteString/Optics.hs view
@@ -8,10 +8,10 @@ , pattern Chars ) where -import Data.ByteString as Strict-import Data.ByteString.Lazy as Lazy-import Data.Int-import Data.Word+import qualified Data.ByteString as Strict+import qualified Data.ByteString.Lazy as Lazy+import Data.Int (Int64)+import Data.Word (Word8) import qualified Data.ByteString.Lazy.Optics as Lazy import qualified Data.ByteString.Strict.Optics as Strict
src/Data/ByteString/Strict/Optics.hs view
@@ -7,10 +7,11 @@ , pattern Chars ) where -import Data.ByteString as Words-import Data.ByteString.Char8 as Char8-import Data.Int-import Data.Word+import Data.ByteString (ByteString)+import qualified Data.ByteString as Words+import qualified Data.ByteString.Char8 as Char8+import Data.Int (Int64)+import Data.Word (Word8) import Optics.Core import Optics.Extra.Internal.ByteString
src/Data/HashMap/Optics.hs view
@@ -47,8 +47,9 @@ , at' ) where -import Data.Hashable-import Data.HashMap.Lazy as HashMap+import Data.Hashable (Hashable)+import Data.HashMap.Lazy (HashMap)+import qualified Data.HashMap.Lazy as HashMap import Optics.Core
src/Data/HashSet/Optics.hs view
@@ -10,8 +10,9 @@ , setOf ) where -import Data.Hashable-import Data.HashSet as HashSet+import Data.Hashable (Hashable)+import Data.HashSet (HashSet)+import qualified Data.HashSet as HashSet import Optics.Fold import Optics.Optic@@ -24,7 +25,7 @@ -- but you can manipulate it by reading using 'Optics.Fold.folded' and -- reindexing it via 'setmapped'. ----- >>> over setmapped (+1) (fromList [1,2,3,4])+-- >>> over setmapped (+1) (HashSet.fromList [1,2,3,4]) -- fromList [2,3,4,5] setmapped :: (Eq b, Hashable b) => Setter (HashSet a) (HashSet b) a b setmapped = sets HashSet.map
src/Data/Text/Lazy/Optics.hs view
@@ -21,10 +21,11 @@ , pattern Text ) where -import Data.ByteString.Lazy as ByteString-import Data.Text.Lazy as Text-import Data.Text.Lazy.Builder-import Data.Text.Lazy.Encoding+import Data.ByteString.Lazy (ByteString)+import Data.Text.Lazy (Text)+import qualified Data.Text.Lazy as Text+import qualified Data.Text.Lazy.Builder as B+import qualified Data.Text.Lazy.Encoding as TE import Data.Profunctor.Indexed @@ -34,6 +35,9 @@ import Optics.Internal.IxTraversal import Optics.Internal.Optic +-- $setup+-- >>> import Data.ByteString.Lazy as LBS+ -- | This isomorphism can be used to 'pack' (or 'unpack') lazy 'Text.Text'. -- -- >>> "hello" ^. packed -- :: Text@@ -87,8 +91,8 @@ -- 'fromLazyText' x ≡ x 'Optics.Operators.^.' 'builder' -- 'toLazyText' x ≡ x 'Optics.Operators.^.' 're' 'builder' -- @-builder :: Iso' Text Builder-builder = iso fromLazyText toLazyText+builder :: Iso' Text B.Builder+builder = iso B.fromLazyText B.toLazyText {-# INLINE builder #-} -- | Traverse the individual characters in a 'Text.Text'.@@ -117,10 +121,10 @@ -- Note: This function does not decode lazily, as it must consume the entire -- input before deciding whether or not it fails. ----- >>> ByteString.unpack (utf8 # Text.pack "☃")+-- >>> LBS.unpack (utf8 # Text.pack "☃") -- [226,152,131] utf8 :: Prism' ByteString Text-utf8 = prism' encodeUtf8 (preview _Right . decodeUtf8')+utf8 = prism' TE.encodeUtf8 (preview _Right . TE.decodeUtf8') {-# INLINE utf8 #-} pattern Text :: String -> Text
src/Data/Text/Optics.hs view
@@ -19,9 +19,9 @@ , pattern Text ) where -import Data.Text as Strict-import Data.Text.Lazy as Lazy-import Data.Text.Lazy.Builder+import qualified Data.Text as Strict+import qualified Data.Text.Lazy as Lazy+import qualified Data.Text.Lazy.Builder as B import Optics.Core import qualified Data.Text.Lazy.Optics as Lazy@@ -44,7 +44,7 @@ -- @ -- 'fromText' x ≡ x 'Optics.Operators.^.' 'builder' -- @- builder :: Iso' t Builder+ builder :: Iso' t B.Builder -- | Traverse the individual characters in strict or lazy 'Text'. --
src/Data/Text/Strict/Optics.hs view
@@ -22,10 +22,11 @@ ) where import Data.ByteString (ByteString)-import Data.Text as Strict-import Data.Text.Encoding+import Data.Text (Text)+import qualified Data.Text as Strict+import qualified Data.Text.Encoding as TE import Data.Text.Lazy (toStrict)-import Data.Text.Lazy.Builder+import qualified Data.Text.Lazy.Builder as B import Data.Profunctor.Indexed @@ -48,7 +49,7 @@ -- 'packed' ≡ 'iso' 'pack' 'unpack' -- @ packed :: Iso' String Text-packed = iso pack unpack+packed = iso Strict.pack Strict.unpack {-# INLINE packed #-} -- | This isomorphism can be used to 'unpack' (or 'pack') strict 'Strict.Text'.@@ -87,8 +88,8 @@ -- 'fromText' x ≡ x 'Optics.Operators.^.' 'builder' -- 'toStrict' ('toLazyText' x) ≡ x 'Optics.Operators.^.' 're' 'builder' -- @-builder :: Iso' Text Builder-builder = iso fromText (toStrict . toLazyText)+builder :: Iso' Text B.Builder+builder = iso B.fromText (toStrict . B.toLazyText) {-# INLINE builder #-} -- | Traverse the individual characters in strict 'Strict.Text'.@@ -114,7 +115,7 @@ -- >>> utf8 # Strict.pack "☃" -- "\226\152\131" utf8 :: Prism' ByteString Text-utf8 = prism' encodeUtf8 (preview _Right . decodeUtf8')+utf8 = prism' TE.encodeUtf8 (preview _Right . TE.decodeUtf8') {-# INLINE utf8 #-} pattern Text :: String -> Text@@ -126,7 +127,7 @@ -- | Internal implementation of 'unpacked'. unpacked__ :: Profunctor p => Optic__ p i i Text Text String String-unpacked__ = dimap unpack pack+unpacked__ = dimap Strict.unpack Strict.pack {-# INLINE unpacked__ #-} -- | Internal implementation of 'text'.
src/Data/Vector/Generic/Optics.hs view
@@ -18,9 +18,9 @@ ) where import Data.Vector.Fusion.Bundle (Bundle)-import Data.Vector.Generic as V hiding (zip, filter, indexed)+import Data.Vector.Generic (Vector)+import qualified Data.Vector.Generic as V import Data.Vector.Generic.New (New)-import Prelude hiding ((++), length, null, head, tail, init, last, map, reverse) import Data.Profunctor.Indexed @@ -30,6 +30,9 @@ import Optics.Internal.IxFold import Optics.Internal.Optic +-- $setup+-- >>> import qualified Data.Vector as Vector+ -- | @sliced i n@ provides a 'Lens' that edits the @n@ elements starting at -- index @i@ from a 'Lens'. --@@ -50,7 +53,7 @@ -> Int -- ^ @n@ length -> Lens' (v a) (v a) sliced i n = lensVL $ \f v ->- (\v0 -> v // zip [i..i+n-1] (V.toList v0)) <$> f (slice i n v)+ (\v0 -> v V.// zip [i..i+n-1] (V.toList v0)) <$> f (V.slice i n v) {-# INLINE sliced #-} -- | Similar to 'toListOf', but returning a 'Vector'.@@ -62,7 +65,7 @@ => Optic' k is s a -> s -> v a-toVectorOf l s = fromList (toListOf l s)+toVectorOf l s = V.fromList (toListOf l s) {-# INLINE toVectorOf #-} -- | Convert a list to a 'Vector' (or back.)@@ -75,32 +78,32 @@ vector :: (Vector v a, Vector v b) => Iso [a] [b] (v a) (v b)-vector = iso fromList V.toList+vector = iso V.fromList V.toList {-# INLINE vector #-} -- | Convert a 'Vector' to a finite 'Bundle' (or back.) asStream :: (Vector v a, Vector v b) => Iso (v a) (v b) (Bundle v a) (Bundle v b)-asStream = iso stream unstream+asStream = iso V.stream V.unstream {-# INLINE asStream #-} -- | Convert a 'Vector' to a finite 'Bundle' from right to left (or back.) asStreamR :: (Vector v a, Vector v b) => Iso (v a) (v b) (Bundle v a) (Bundle v b)-asStreamR = iso streamR unstreamR+asStreamR = iso V.streamR V.unstreamR {-# INLINE asStreamR #-} -- | Convert a 'Vector' back and forth to an initializer that when run produces -- a copy of the 'Vector'. cloned :: Vector v a => Iso' (v a) (New v a)-cloned = iso clone new+cloned = iso V.clone V.new {-# INLINE cloned #-} -- | Convert a 'Vector' to a version that doesn't retain any extra memory. forced :: (Vector v a, Vector v b) => Iso (v a) (v b) (v a) (v b)-forced = iso force force+forced = iso V.force V.force {-# INLINE forced #-} -- | This 'Traversal' will ignore any duplicates in the supplied list of@@ -110,7 +113,7 @@ -- [4,8,6,12,20,22] ordinals :: forall v a. Vector v a => [Int] -> IxTraversal' Int (v a) a ordinals is = itraversalVL $ \f v ->- (v //) <$> traverse (\i -> (,) i <$> f i (v ! i)) (ordinalNub (length v) is)+ (v V.//) <$> traverse (\i -> (,) i <$> f i (v V.! i)) (ordinalNub (V.length v) is) {-# INLINE ordinals #-} -- | Like 'ix' but polymorphic in the vector type.@@ -132,7 +135,7 @@ converted :: (Vector v a, Vector w a, Vector v b, Vector w b) => Iso (v a) (v b) (w a) (w b)-converted = iso convert convert+converted = iso V.convert V.convert {-# INLINE converted #-} ----------------------------------------@@ -189,6 +192,3 @@ :: (V.Vector v a, V.Vector v b) => IxFunArrow (Int -> j) (v a) (v b) #-}---- $setup--- >>> import qualified Data.Vector as Vector
src/Data/Vector/Optics.hs view
@@ -10,11 +10,12 @@ , ordinals ) where -import Data.Vector as Vector hiding (zip, filter, indexed)-import Prelude hiding ((++), length, null, head, tail, init, last, map, reverse)-+import Data.Vector (Vector) import Optics.Core import qualified Data.Vector.Generic.Optics as G++-- $setup+-- >>> import Data.Vector as Vector -- | @sliced i n@ provides a 'Lens' that edits the @n@ elements starting at -- index @i@ from a 'Lens'.
src/Optics/At.hs view
@@ -43,19 +43,21 @@ , Contains(..) ) where -import Data.ByteString as StrictB-import Data.ByteString.Lazy as LazyB-import Data.HashMap.Lazy as HashMap-import Data.HashSet as HashSet-import Data.Hashable-import Data.Int-import Data.Text as StrictT-import Data.Text.Lazy as LazyT-import Data.Vector as Vector hiding (indexed)-import Data.Vector.Primitive as Prim-import Data.Vector.Storable as Storable-import Data.Vector.Unboxed as Unboxed hiding (indexed)-import Data.Word+import qualified Data.ByteString as StrictB+import qualified Data.ByteString.Lazy as LazyB+import Data.HashMap.Lazy (HashMap)+import qualified Data.HashMap.Lazy as HashMap+import Data.HashSet (HashSet)+import qualified Data.HashSet as HashSet+import Data.Hashable (Hashable)+import Data.Int (Int64)+import qualified Data.Text as StrictT+import qualified Data.Text.Lazy as LazyT+import qualified Data.Vector as Vector hiding (indexed)+import qualified Data.Vector.Primitive as Prim+import qualified Data.Vector.Storable as Storable+import qualified Data.Vector.Unboxed as Unboxed hiding (indexed)+import Data.Word (Word8) import Optics.Core @@ -100,7 +102,7 @@ {-# INLINE ix #-} type instance IxValue (Prim.Vector a) = a-instance Prim a => Ixed (Prim.Vector a) where+instance Prim.Prim a => Ixed (Prim.Vector a) where ix i = atraversalVL $ \point f v -> if 0 <= i && i < Prim.length v then f (v Prim.! i) <&> \a -> v Prim.// [(i, a)]@@ -108,7 +110,7 @@ {-# INLINE ix #-} type instance IxValue (Storable.Vector a) = a-instance Storable a => Ixed (Storable.Vector a) where+instance Storable.Storable a => Ixed (Storable.Vector a) where ix i = atraversalVL $ \point f v -> if 0 <= i && i < Storable.length v then f (v Storable.! i) <&> \a -> v Storable.// [(i, a)]@@ -116,7 +118,7 @@ {-# INLINE ix #-} type instance IxValue (Unboxed.Vector a) = a-instance Unbox a => Ixed (Unboxed.Vector a) where+instance Unboxed.Unbox a => Ixed (Unboxed.Vector a) where ix i = atraversalVL $ \point f v -> if 0 <= i && i < Unboxed.length v then f (v Unboxed.! i) <&> \a -> v Unboxed.// [(i, a)]
src/Optics/Cons.hs view
@@ -29,7 +29,7 @@ import Data.Vector.Primitive (Prim) import Data.Vector.Storable (Storable) import Data.Vector.Unboxed (Unbox)-import Data.Word+import Data.Word (Word8) import qualified Data.ByteString as StrictB import qualified Data.ByteString.Lazy as LazyB import qualified Data.Text as StrictT
src/Optics/Each.hs view
@@ -13,18 +13,19 @@ Each(..) ) where -import Data.ByteString as SB-import Data.ByteString.Lazy as LB-import Data.HashMap.Lazy as HashMap-import Data.Int-import Data.Text as ST-import Data.Text.Lazy as LT+import qualified Data.ByteString as SB+import qualified Data.ByteString.Lazy as LB+import Data.HashMap.Lazy (HashMap)+import qualified Data.HashMap.Lazy as HashMap+import Data.Int (Int64)+import qualified Data.Text as ST+import qualified Data.Text.Lazy as LT import Data.Text.Optics (text) import Data.Vector.Generic.Optics (vectorTraverse) import Data.Vector.Primitive (Prim) import Data.Vector.Storable (Storable) import Data.Vector.Unboxed (Unbox)-import Data.Word+import Data.Word (Word8) import qualified Data.Vector as V import qualified Data.Vector.Primitive as VP import qualified Data.Vector.Storable as VS
src/Optics/Empty.hs view
@@ -18,15 +18,17 @@ , pattern Empty ) where -import Data.ByteString as StrictB-import Data.ByteString.Lazy as LazyB-import Data.HashMap.Lazy as HashMap-import Data.HashSet as HashSet-import Data.Text as StrictT-import Data.Text.Lazy as LazyT-import Data.Vector as Vector-import Data.Vector.Storable as Storable-import Data.Vector.Unboxed as Unboxed+import qualified Data.ByteString as StrictB+import qualified Data.ByteString.Lazy as LazyB+import Data.HashMap.Lazy (HashMap)+import qualified Data.HashMap.Lazy as HashMap+import Data.HashSet (HashSet)+import qualified Data.HashSet as HashSet+import qualified Data.Text as StrictT+import qualified Data.Text.Lazy as LazyT+import qualified Data.Vector as Vector+import qualified Data.Vector.Storable as Storable+import qualified Data.Vector.Unboxed as Unboxed import Optics.Core @@ -44,11 +46,11 @@ _Empty = nearly Vector.empty Vector.null {-# INLINE _Empty #-} -instance Unbox a => AsEmpty (Unboxed.Vector a) where+instance Unboxed.Unbox a => AsEmpty (Unboxed.Vector a) where _Empty = nearly Unboxed.empty Unboxed.null {-# INLINE _Empty #-} -instance Storable a => AsEmpty (Storable.Vector a) where+instance Storable.Storable a => AsEmpty (Storable.Vector a) where _Empty = nearly Storable.empty Storable.null {-# INLINE _Empty #-}
src/Optics/Extra/Internal/Zoom.hs view
@@ -139,8 +139,7 @@ instance Monoid a => Monoid (May a) where mempty = May $ Just mempty- May (Just a) `mappend` May (Just b) = May $ Just (a `mappend` b)- _ `mappend` _ = May Nothing+ mappend = (<>) {-# INLINE mempty #-} {-# INLINE mappend #-} @@ -163,9 +162,7 @@ instance Monoid a => Monoid (Err e a) where mempty = Err $ Right mempty- Err (Right a) `mappend` Err (Right b) = Err $ Right (a `mappend` b)- Err (Left e) `mappend` _ = Err $ Left e- _ `mappend` Err (Left e) = Err $ Left e+ mappend = (<>) {-# INLINE mempty #-} {-# INLINE mappend #-} @@ -186,7 +183,7 @@ instance (Monad m, Monoid r) => Monoid (Effect m r) where mempty = Effect $ pure mempty- Effect ma `mappend` Effect mb = Effect $ mappend <$> ma <*> mb+ mappend = (<>) {-# INLINE mempty #-} {-# INLINE mappend #-} @@ -206,10 +203,7 @@ instance (Monoid c, Monoid w, Monad m) => Monoid (EffectRWS w s m c) where mempty = EffectRWS $ \s -> pure (mempty, s, mempty)- EffectRWS ma `mappend` EffectRWS mb = EffectRWS $ \s -> do- (c, s', w) <- ma s- (c', s'', w') <- mb s'- pure (c `mappend` c', s'', w `mappend` w')+ mappend = (<>) {-# INLINE mempty #-} {-# INLINE mappend #-}
src/Optics/Indexed.hs view
@@ -51,9 +51,6 @@ , ifor ) where -import qualified Data.HashMap.Lazy as HM-import qualified Data.Vector as V- import Optics.Indexed.Core import Optics.IxAffineFold import Optics.IxAffineTraversal@@ -63,36 +60,4 @@ import Optics.IxSetter import Optics.IxTraversal -------------------------------------------- Extra *WithIndex instances---- HashMap--instance FunctorWithIndex k (HM.HashMap k) where- imap = HM.mapWithKey- {-# INLINE imap #-}-instance FoldableWithIndex k (HM.HashMap k) where- ifoldr = HM.foldrWithKey- ifoldl' = HM.foldlWithKey' . flip- {-# INLINE ifoldr #-}- {-# INLINE ifoldl' #-}-instance TraversableWithIndex k (HM.HashMap k) where- itraverse = HM.traverseWithKey- {-# INLINE itraverse #-}---- Vector--instance FunctorWithIndex Int V.Vector where- imap = V.imap- {-# INLINE imap #-}-instance FoldableWithIndex Int V.Vector where- ifoldMap f = ifoldr (\i -> mappend . f i) mempty- ifoldr = V.ifoldr- ifoldl' = V.ifoldl' . flip- {-# INLINE ifoldMap #-}- {-# INLINE ifoldr #-}- {-# INLINE ifoldl' #-}-instance TraversableWithIndex Int V.Vector where- itraverse f v =- let !n = V.length v in V.fromListN n <$> itraverse f (V.toList v)- {-# INLINE itraverse #-}+import Data.Functor.WithIndex.Instances ()
src/Optics/Passthrough.hs view
@@ -16,11 +16,11 @@ -> (ViewResult k r, t) instance PermeableOptic An_Iso r where- passthrough = toLensVL+ passthrough o = toLensVL o {-# INLINE passthrough #-} instance PermeableOptic A_Lens r where- passthrough = toLensVL+ passthrough o = toLensVL o {-# INLINE passthrough #-} instance PermeableOptic A_Prism r where
src/Optics/Zoom.hs view
@@ -9,24 +9,31 @@ , MagnifyMany(..) ) where -import Control.Monad.Reader as Reader-import Control.Monad.State-import Control.Monad.Trans.Error-import Control.Monad.Trans.Except-import Control.Monad.Trans.Identity-import Control.Monad.Trans.List-import Control.Monad.Trans.Maybe-import Control.Monad.Trans.RWS.Lazy as L-import Control.Monad.Trans.RWS.Strict as S-import Control.Monad.Trans.State.Lazy as L-import Control.Monad.Trans.State.Strict as S-import Control.Monad.Trans.Writer.Lazy as L-import Control.Monad.Trans.Writer.Strict as S+import Control.Monad.Reader (ReaderT (..), MonadReader)+import Control.Monad.State (MonadState (..))+import Control.Monad.Trans.Error (Error, ErrorT (..))+import Control.Monad.Trans.Except (ExceptT (..), runExceptT)+import Control.Monad.Trans.Identity (IdentityT (..))+import Control.Monad.Trans.List (ListT (..))+import Control.Monad.Trans.Maybe (MaybeT (..))+import qualified Control.Monad.Trans.RWS.Lazy as L+import qualified Control.Monad.Trans.RWS.Strict as S+import qualified Control.Monad.Trans.State.Lazy as L+import qualified Control.Monad.Trans.State.Strict as S+import qualified Control.Monad.Trans.Writer.Lazy as L+import qualified Control.Monad.Trans.Writer.Strict as S import Optics.Core import Optics.Internal.Utils import Optics.Extra.Internal.Zoom +-- $setup+-- >>> import Data.Monoid+-- >>> import Control.Monad.Reader (runReader, ask)+-- >>> import Optics.State+-- >>> import Optics.State.Operators+-- >>> import Optics.View+ -- Chosen so that they have lower fixity than ('%='). infixr 2 `zoom`, `zoomMaybe`, `zoomMany` infixr 2 `magnify`, `magnifyMaybe`, `magnifyMany`@@ -215,10 +222,10 @@ -- >>> (1,2) & magnify _2 (+1) -- 3 ----- >>> flip runReader (1,2) $ magnify _1 Reader.ask+-- >>> flip runReader (1,2) $ magnify _1 ask -- 1 ----- >>> flip runReader (1,2,[10..20]) $ magnifyMaybe (_3 % _tail) Reader.ask+-- >>> flip runReader (1,2,[10..20]) $ magnifyMaybe (_3 % _tail) ask -- Just [11,12,13,14,15,16,17,18,19,20] -- class@@ -404,9 +411,3 @@ instance MagnifyMany m n b a => MagnifyMany (ExceptT e m) (ExceptT e n) b a where magnifyMany o = ExceptT #. fmap getErr . magnifyMany o . fmap Err .# runExceptT {-# INLINE magnifyMany #-}---- $setup--- >>> import Data.Monoid--- >>> import Optics.State--- >>> import Optics.State.Operators--- >>> import Optics.View