Skip to content

Instantly share code, notes, and snippets.

@myuon
Created April 6, 2014 06:41
Show Gist options
  • Save myuon/10002295 to your computer and use it in GitHub Desktop.
Save myuon/10002295 to your computer and use it in GitHub Desktop.
Lens CheatSheet

Lens CheatSheet

-- Accessors
_Show :: (Read a, Show a) => Prism' String a
only :: Eq a => a -> Prism' a ()
re :: AReview s t a b -> Getter b t
mapped :: Functor f => Setter (f a) (f b) a b
lifted :: Monad m => Setter (m a) (m b) a b

-- Pure operators
(&) :: a -> (a -> b) -> b
(^.) :: s -> Getting a s a -> a -- (^#), (#~) ... : ALens series
(#) :: AReview s t a b -> b -> t
(.~) :: ASetter s t a b -> b -> s -> t -- set
(%~) :: Profunctor p => Setting p s t a b -> p a b -> s -> t -- over
(<&>) :: Functor f => f a -> (a -> b) -> f b
(??) :: Functor f => f (a -> b) -> a -> f b
(&~) :: s -> State s a -> s

-- Monadic operators
use :: MonadState s m => Getting a s a -> m a
reuse :: MonadState b m => AReview s t a b -> m t
view :: MonadReader s m => Getting a s a -> m a
review :: MonadReader b m => AReview s t a b -> m t
listening :: MonadWriter w m => Getting u w u -> m a -> m (a, u)
(.=) :: MonadState s m => ASetter s s a b -> b -> m () -- assign
(%=) :: (Profunctor p, MonadState s m) => Setting p s s a b -> p a b -> m ()
(<%=) :: (Profunctor p, MonadState s m) => Over p ((,) b) s s a b -> p a b -> m b

-- Monadic Action
(^!) :: Monad m => s -> Acting m a s a -> m a
(<~) :: MonadState s m => ASetter s s a b -> m b -> m ()
(<.=) :: MonadState s m => ASetter s s a b -> b -> m b
magnify :: (Magnify m n b a) => LensLike' (Magnified m c) a b -> m c -> n c
zoom :: (Zoom m n s t) => LensLike' (Zoomed m c) t s -> m c -> n c

Bool

contains :: (Contains m) => Index m -> Lens' m Bool

(||~) :: ASetter s t Bool Bool -> Bool -> s -> t
(&&~) :: ASetter s t Bool Bool -> Bool -> s -> t
is :: APrism s t a b -> s -> Bool
isn't :: APrism s t a b -> s -> Bool
has :: Getting Any s a -> s -> Bool
anyOf :: Profunctor p => Accessing p Any s a -> p a Bool -> s -> Bool
allOf :: Profunctor p => Accessing p All s a -> p a Bool -> s -> Bool
noneOf :: Profunctor p => Accessing p Any s a -> p a Bool -> s -> Bool
andOf :: Getting All s Bool -> s -> Bool

(&&=) :: MonadState s m => ASetter' s Bool -> Bool -> m ()
(||=) :: MonadState s m => ASetter' s Bool -> Bool -> m ()

Numeric

(+~) :: Num a => ASetter s t a a -> a -> s -> t
(*~) :: Num a => ASetter s t a a -> a -> s -> t
(-~) :: Num a => ASetter s t a a -> a -> s -> t
(//~) :: Fractional a => ASetter s t a a -> a -> s -> t
sumOf :: Num a => Getting (Endo (Endo a)) s a -> s -> a

(+=) :: (MonadState s m, Num a) => ASetter' s a -> a -> m ()
(-=) :: (MonadState s m, Num a) => ASetter' s a -> a -> m ()
(*=) :: (MonadState s m, Num a) => ASetter' s a -> a -> m ()
(//=) :: (MonadState s m, Fractional a) => ASetter' s a -> a -> m ()

Maybe

_Just :: Prism (Maybe a) (Maybe b) a b
_Nothing :: Prism' (Maybe a) ()

(?~) :: ASetter s t a (Maybe b) -> b -> s -> t
(^?) :: s -> Getting (First a) s a -> Maybe a

(?=) :: MonadState s m => ASetter s s a (Maybe b) -> b -> m ()
(^!?) :: Monad m => s -> Acting m (Leftmost a) s a -> m (Maybe a)
preview :: MonadReader s m => Getting (First a) s a -> m (Maybe a) -- (^?)
preuse :: MonadState s m => Getting (First a) s a -> m (Maybe a)

(<?=) :: MonadState s m => ASetter s s a (Maybe b) -> b -> m b

Tuple

_1 :: (Field1 s t a b) => Lens s t a b -- _2 .. _9

(<.~) :: ASetter s t a b -> b -> s -> (b, t)
foldOf :: Getting a s a -> s -> a
both :: Bitraversable r => Traversal (r a a) (r b b) a b
traverseOf :: Over p f s t a b -> p a (f b) -> s -> f t -- forOf

(%%~) :: Optical p q f s t a b -> p a (f b) -> q s (f t)
(<%~) :: Profunctor p => Optical p q ((,) b) s t a b -> p a b -> q s (b, t) -- (<%~), (<+~) ... : Pair series

(%%=) :: MonadState s m => Over p ((,) r) s s a b -> p a (r, b) -> m r

container

at :: (At m) => Index m -> Lens' m (Maybe (IxValue m))
ix :: (Ixed m) => Index m -> Traversal' m (IxValue m)
each :: (Each s t a b) => Traversal s t a b
folded :: Foldable f => IndexedFold Int (f a) a
taking :: (Conjoined p, Applicative f) => Int -> Traversing p f s t a a -> Over p f s t a a

(<|) :: Cons s s a a => a -> s -> s
(%@~) :: AnIndexedSetter i s t a b -> (i -> a -> b) -> s -> t -- iover
foldOf :: Getting a s a -> s -> a
foldlOf :: Getting (Dual (Endo r)) s a -> (r -> a -> r) -> r -> s -> r
(^..) :: s -> Getting (Endo [a]) s a -> [a] -- toListOf
(^@..) :: s -> IndexedGetting i (Endo [(i, a)]) s a -> [(i, a)]
itoList :: FoldableWithIndex i f => f a -> [(i, a)]
traverseOf :: Over p f s t a b -> p a (f b) -> s -> f t -- forOf
transposeOf :: LensLike ZipList s t [a] a -> s -> [t]

(^!!) :: Monad m => s -> Acting m [a] s a -> m [a]
(^@!!) :: Monad m => s -> IndexedActing i m [(i, a)] s a -> m [(i, a)]
(%@=) :: MonadState s m => AnIndexedSetter i s s a b -> (i -> a -> b) -> m ()
mapMOf :: Profunctor p => Over p (WrappedMonad m) s t a b -> p a (m b) -> s -> m t -- forMOf

Others

_Left :: Prism (Either a c) (Either b c) a b
_Right :: Prism (Either c a) (Either c b) a b

(<>~) :: Monoid a => ASetter s t a a -> a -> s -> t
op :: Wrapped s => (Unwrapped s -> s) -> s -> Unwrapped s

(<>=) :: (MonadState s m, Monoid a) => ASetter' s a -> a -> m ()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment