| Copyright | (C) 2012-16 Edward Kmett Michael Sloan |
|---|---|
| License | BSD-style (see the file LICENSE) |
| Maintainer | Edward Kmett <ekmett@gmail.com> |
| Stability | experimental |
| Portability | Rank2, MPTCs, fundeps |
| Safe Haskell | Trustworthy |
| Language | Haskell2010 |
Control.Lens.Wrapped
Description
The Wrapped class provides similar functionality as Control.Newtype,
from the newtype package, but in a more convenient and efficient form.
There are a few functions from newtype that are not provided here, because
they can be done with the Iso directly:
Control.Newtype.overSumf ≡_UnwrappingSum%~f Control.Newtype.underSumf ≡_WrappingSum%~f Control.Newtype.overFSumf ≡mapping(_UnwrappingSum)%~f Control.Newtype.underFSumf ≡mapping(_WrappingSum)%~f
under can also be used with _Unwrapping to provide the equivalent of
Control.Newtype.under. Also, most use cases don't need full polymorphism,
so only the single constructor _Wrapping functions would be needed.
These equivalences aren't 100% honest, because newtype's operators
need to rely on two Newtype constraints. This means that the wrapper used
for the output is not necessarily the same as the input.
Synopsis
- class Wrapped s where
- _Unwrapped' :: Wrapped s => Iso' (Unwrapped s) s
- _Wrapping' :: Wrapped s => (Unwrapped s -> s) -> Iso' s (Unwrapped s)
- _Unwrapping' :: Wrapped s => (Unwrapped s -> s) -> Iso' (Unwrapped s) s
- class Wrapped s => Rewrapped s t
- class (Rewrapped s t, Rewrapped t s) => Rewrapping s t
- _Wrapped :: Rewrapping s t => Iso s t (Unwrapped s) (Unwrapped t)
- _Unwrapped :: Rewrapping s t => Iso (Unwrapped t) (Unwrapped s) t s
- _Wrapping :: Rewrapping s t => (Unwrapped s -> s) -> Iso s t (Unwrapped s) (Unwrapped t)
- _Unwrapping :: Rewrapping s t => (Unwrapped s -> s) -> Iso (Unwrapped t) (Unwrapped s) t s
- op :: Wrapped s => (Unwrapped s -> s) -> s -> Unwrapped s
- ala :: (Functor f, Rewrapping s t) => (Unwrapped s -> s) -> ((Unwrapped t -> t) -> f s) -> f (Unwrapped s)
- alaf :: (Functor f, Functor g, Rewrapping s t) => (Unwrapped s -> s) -> (f t -> g s) -> f (Unwrapped t) -> g (Unwrapped s)
- pattern Wrapped :: Rewrapped s s => Unwrapped s -> s
- pattern Unwrapped :: Rewrapped t t => t -> Unwrapped t
- _GWrapped' :: forall s (d :: Meta) (c :: Meta) (s' :: Meta) a. (Generic s, D1 d (C1 c (S1 s' (Rec0 a))) ~ Rep s, Unwrapped s ~ GUnwrapped (Rep s)) => Iso' s (Unwrapped s)
Wrapping and Unwrapping monomorphically
class Wrapped s where Source #
Wrapped provides isomorphisms to wrap and unwrap newtypes or
data types with one constructor.
Minimal complete definition
Nothing
Methods
_Wrapped' :: Iso' s (Unwrapped s) Source #
An isomorphism between s and a.
If your type has a Generic instance, _Wrapped' will default to _GWrapped',
and you can choose to not override it with your own definition.
Instances
| Wrapped IntSet Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped NoMethodError Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped PatternMatchFail Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped RecConError Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped RecSelError Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped RecUpdError Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped TypeError Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped All Source # | |||||
| Wrapped Any Source # | |||||
| Wrapped ErrorCall Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped Errno Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CBool Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CChar Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CClock Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CDouble Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CFloat Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CInt Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CIntMax Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CIntPtr Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CLLong Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CLong Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CPtrdiff Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CSChar Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CSUSeconds Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CShort Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CSigAtomic Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CSize Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CTime Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CUChar Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CUInt Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CUIntMax Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CUIntPtr Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CULLong Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CULong Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CUSeconds Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CUShort Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CWchar Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped AssertionFailed Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CompactionFailed Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CBlkCnt Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CBlkSize Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CCc Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CClockId Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CDev Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CFsBlkCnt Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CFsFilCnt Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CGid Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CId Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CIno Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CKey Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CMode Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CNlink Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped COff Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CPid Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CRLim Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CSpeed Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CSsize Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CTcflag Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CTimer Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped CUid Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped Fd Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped (Comparison a) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped (Equivalence a) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped (Predicate a) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped (First a) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped (Last a) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped (Max a) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped (Min a) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped (WrappedMonoid a) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped (IntMap a) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped (Seq a) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Ord a => Wrapped (Set a) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped (NonEmpty a) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped (Identity a) Source # | |||||
| Wrapped (First a) Source # | |||||
| Wrapped (Last a) Source # | |||||
| Wrapped (Down a) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped (Dual a) Source # | |||||
| Wrapped (Endo a) Source # | |||||
| Wrapped (Product a) Source # | |||||
| Wrapped (Sum a) Source # | |||||
| Wrapped (ZipList a) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped (Par1 p) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| (Hashable a, Eq a) => Wrapped (HashSet a) Source # | |||||
| Wrapped (Vector a) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Prim a => Wrapped (Vector a) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Storable a => Wrapped (Vector a) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped (Vector a) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Unbox a => Wrapped (Vector a) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped (WrappedMonad m a) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped (Op a b) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Ord k => Wrapped (Map k a) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped (CatchT m a) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped (Alt f a) Source # | |||||
| Wrapped (CoiterT w a) Source # | |||||
| Wrapped (IterT m a) Source # | |||||
| Wrapped (ArrowMonad m a) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped (MaybeApply f a) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
Methods _Wrapped' :: Iso' (MaybeApply f a) (Unwrapped (MaybeApply f a)) Source # | |||||
| Wrapped (WrappedApplicative f a) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
Methods _Wrapped' :: Iso' (WrappedApplicative f a) (Unwrapped (WrappedApplicative f a)) Source # | |||||
| Wrapped (MaybeT m a) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| (Hashable k, Eq k) => Wrapped (HashMap k a) Source # | |||||
| Wrapped (WrappedArrow a b c) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped (Fix p a) Source # | |||||
| Wrapped (Join p a) Source # | |||||
| Wrapped (TracedT m w a) Source # | |||||
| Wrapped (Compose f g a) Source # | |||||
| Wrapped (ComposeCF f g a) Source # | |||||
| Wrapped (ComposeFC f g a) Source # | |||||
| Wrapped (ApT f g a) Source # | |||||
| Wrapped (CofreeT f w a) Source # | |||||
| Wrapped (FreeT f m a) Source # | |||||
| Wrapped (Kleisli m a b) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped (Const a x) Source # | |||||
| Wrapped (Ap f a) Source # | |||||
| Wrapped (Alt f a) Source # | |||||
| Wrapped (Rec1 f p) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped (Static f a b) Source # | |||||
| Wrapped (Tagged s a) Source # | |||||
| Wrapped (Backwards f a) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped (ExceptT e m a) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped (IdentityT m a) Source # | |||||
| Wrapped (ReaderT r m a) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped (StateT s m a) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped (StateT s m a) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped (WriterT w m a) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped (WriterT w m a) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped (Constant a b) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped (Reverse f a) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped (K1 i c p) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped (Costar f d c) Source # | |||||
| Wrapped (Forget r a b) Source # | |||||
| Wrapped (Star f d c) Source # | |||||
| Wrapped (ContT r m a) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped (Compose f g a) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped (Clown f a b) Source # | |||||
| Wrapped (Flip p a b) Source # | |||||
| Wrapped (Joker g a b) Source # | |||||
| Wrapped (WrappedBifunctor p a b) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
Methods _Wrapped' :: Iso' (WrappedBifunctor p a b) (Unwrapped (WrappedBifunctor p a b)) Source # | |||||
| Wrapped ((f :.: g) p) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped (M1 i c f p) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped (WrappedArrow p a b) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
Methods _Wrapped' :: Iso' (WrappedArrow p a b) (Unwrapped (WrappedArrow p a b)) Source # | |||||
| Wrapped (Semi m a b) Source # | |||||
| Wrapped (WrappedCategory k3 a b) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
Methods _Wrapped' :: Iso' (WrappedCategory k3 a b) (Unwrapped (WrappedCategory k3 a b)) Source # | |||||
| Wrapped (Dual k3 a b) Source # | |||||
| Wrapped (RWST r w s m a) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped (RWST r w s m a) Source # | |||||
Defined in Control.Lens.Wrapped Associated Types
| |||||
| Wrapped (Tannen f p a b) Source # | |||||
| Wrapped (Cayley f p a b) Source # | |||||
| Wrapped (Biff p f g a b) Source # | |||||
_Wrapping' :: Wrapped s => (Unwrapped s -> s) -> Iso' s (Unwrapped s) Source #
This is a convenient version of _Wrapped with an argument that's ignored.
The user supplied function is ignored, merely its type is used.
_Unwrapping' :: Wrapped s => (Unwrapped s -> s) -> Iso' (Unwrapped s) s Source #
This is a convenient version of _Wrapped with an argument that's ignored.
The user supplied function is ignored, merely its type is used.
Wrapping and unwrapping polymorphically
class Wrapped s => Rewrapped s t Source #
Instances
class (Rewrapped s t, Rewrapped t s) => Rewrapping s t Source #
Instances
| (Rewrapped s t, Rewrapped t s) => Rewrapping s t Source # | |
Defined in Control.Lens.Wrapped | |
_Wrapped :: Rewrapping s t => Iso s t (Unwrapped s) (Unwrapped t) Source #
Work under a newtype wrapper.
>>>Const "hello" & _Wrapped %~ Prelude.length & getConst5
_Wrapped≡from_Unwrapped_Unwrapped≡from_Wrapped
_Unwrapped :: Rewrapping s t => Iso (Unwrapped t) (Unwrapped s) t s Source #
_Wrapping :: Rewrapping s t => (Unwrapped s -> s) -> Iso s t (Unwrapped s) (Unwrapped t) Source #
This is a convenient version of _Wrapped with an argument that's ignored.
The user supplied function is ignored, merely its types are used.
_Unwrapping :: Rewrapping s t => (Unwrapped s -> s) -> Iso (Unwrapped t) (Unwrapped s) t s Source #
This is a convenient version of _Unwrapped with an argument that's ignored.
The user supplied function is ignored, merely its types are used.
Operations
ala :: (Functor f, Rewrapping s t) => (Unwrapped s -> s) -> ((Unwrapped t -> t) -> f s) -> f (Unwrapped s) Source #
This combinator is based on ala from Conor McBride's work on Epigram.
As with _Wrapping, the user supplied function for the newtype is ignored.
>>>ala Sum foldMap [1,2,3,4]10
>>>ala All foldMap [True,True]True
>>>ala All foldMap [True,False]False
>>>ala Any foldMap [False,False]False
>>>ala Any foldMap [True,False]True
>>>ala Product foldMap [1,2,3,4]24
You may want to think of this combinator as having the following, simpler, type.
ala :: Rewrapping s t => (Unwrapped s -> s) -> ((Unwrapped t -> t) -> e -> s) -> e -> Unwrapped s
alaf :: (Functor f, Functor g, Rewrapping s t) => (Unwrapped s -> s) -> (f t -> g s) -> f (Unwrapped t) -> g (Unwrapped s) Source #
This combinator is based on ala' from Conor McBride's work on Epigram.
As with _Wrapping, the user supplied function for the newtype is ignored.
alaf :: Rewrapping s t => (Unwrapped s -> s) -> ((r -> t) -> e -> s) -> (r -> Unwrapped t) -> e -> Unwrapped s
>>>alaf Sum foldMap Prelude.length ["hello","world"]10