view . to ≡ id
>>> view (to f) a f a
>>> view _2 (1,"hello") "hello"
>>> view (to succ) 5 6
>>> view (_2._1) ("hello",("world","!!!")) "world"As view is commonly used to access the target of a Getter or obtain a monoidal summary of the targets of a Fold, It may be useful to think of it as having one of these more restricted signatures:
view :: Getter s a -> s -> a view :: Monoid m => Fold s m -> s -> m view :: Iso' s a -> s -> a view :: Lens' s a -> s -> a view :: Monoid m => Traversal' s m -> s -> mIn a more general setting, such as when working with a Monad transformer stack you can use:
view :: MonadReader s m => Getter s a -> m a view :: (MonadReader s m, Monoid a) => Fold s a -> m a view :: MonadReader s m => Iso' s a -> m a view :: MonadReader s m => Lens' s a -> m a view :: (MonadReader s m, Monoid a) => Traversal' s a -> m a
views l f ≡ view (l . to f)
>>> views (to f) g a g (f a)
>>> views _2 length (1,"hello") 5As views is commonly used to access the target of a Getter or obtain a monoidal summary of the targets of a Fold, It may be useful to think of it as having one of these more restricted signatures:
views :: Getter s a -> (a -> r) -> s -> r views :: Monoid m => Fold s a -> (a -> m) -> s -> m views :: Iso' s a -> (a -> r) -> s -> r views :: Lens' s a -> (a -> r) -> s -> r views :: Monoid m => Traversal' s a -> (a -> m) -> s -> mIn a more general setting, such as when working with a Monad transformer stack you can use:
views :: MonadReader s m => Getter s a -> (a -> r) -> m r views :: (MonadReader s m, Monoid r) => Fold s a -> (a -> r) -> m r views :: MonadReader s m => Iso' s a -> (a -> r) -> m r views :: MonadReader s m => Lens' s a -> (a -> r) -> m r views :: (MonadReader s m, Monoid r) => Traversal' s a -> (a -> r) -> m r
views :: MonadReader s m => Getting r s a -> (a -> r) -> m r
ipreview = view . ipreThis is usually applied in the Reader Monad (->) s.
ipreview :: IndexedGetter i s a -> s -> Maybe (i, a) ipreview :: IndexedFold i s a -> s -> Maybe (i, a) ipreview :: IndexedLens' i s a -> s -> Maybe (i, a) ipreview :: IndexedTraversal' i s a -> s -> Maybe (i, a)However, it may be useful to think of its full generality when working with a Monad transformer stack:
ipreview :: MonadReader s m => IndexedGetter s a -> m (Maybe (i, a)) ipreview :: MonadReader s m => IndexedFold s a -> m (Maybe (i, a)) ipreview :: MonadReader s m => IndexedLens' s a -> m (Maybe (i, a)) ipreview :: MonadReader s m => IndexedTraversal' s a -> m (Maybe (i, a))
ipreviews = views . ipreThis is usually applied in the Reader Monad (->) s.
ipreviews :: IndexedGetter i s a -> (i -> a -> r) -> s -> Maybe r ipreviews :: IndexedFold i s a -> (i -> a -> r) -> s -> Maybe r ipreviews :: IndexedLens' i s a -> (i -> a -> r) -> s -> Maybe r ipreviews :: IndexedTraversal' i s a -> (i -> a -> r) -> s -> Maybe rHowever, it may be useful to think of its full generality when working with a Monad transformer stack:
ipreviews :: MonadReader s m => IndexedGetter i s a -> (i -> a -> r) -> m (Maybe r) ipreviews :: MonadReader s m => IndexedFold i s a -> (i -> a -> r) -> m (Maybe r) ipreviews :: MonadReader s m => IndexedLens' i s a -> (i -> a -> r) -> m (Maybe r) ipreviews :: MonadReader s m => IndexedTraversal' i s a -> (i -> a -> r) -> m (Maybe r)
iviews ≡ ifoldMapOf
listToMaybe . toList ≡ preview folded
preview = view . preUnlike ^?, this function uses a MonadReader to read the value to be focused in on. This allows one to pass the value as the last argument by using the MonadReader instance for (->) s However, it may also be used as part of some deeply nested transformer stack. preview uses a monoidal value to obtain the result. This means that it generally has good performance, but can occasionally cause space leaks or even stack overflows on some data types. There is another function, firstOf, which avoids these issues at the cost of a slight constant performance cost and a little less flexibility. It may be helpful to think of preview as having one of the following more specialized types:
preview :: Getter s a -> s -> Maybe a preview :: Fold s a -> s -> Maybe a preview :: Lens' s a -> s -> Maybe a preview :: Iso' s a -> s -> Maybe a preview :: Traversal' s a -> s -> Maybe a
preview :: MonadReader s m => Getter s a -> m (Maybe a) preview :: MonadReader s m => Fold s a -> m (Maybe a) preview :: MonadReader s m => Lens' s a -> m (Maybe a) preview :: MonadReader s m => Iso' s a -> m (Maybe a) preview :: MonadReader s m => Traversal' s a -> m (Maybe a)
review ≡ view . re review . unto ≡ id
>>> review _Left "mustard" Left "mustard"
>>> review (unto succ) 5 6Usually review is used in the (->) Monad with a Prism or Iso, in which case it may be useful to think of it as having one of these more restricted type signatures:
review :: Iso' s a -> a -> s review :: Prism' s a -> a -> sHowever, when working with a Monad transformer stack, it is sometimes useful to be able to review the current environment, in which case it may be beneficial to think of it as having one of these slightly more liberal type signatures:
review :: MonadReader a m => Iso' s a -> m s review :: MonadReader a m => Prism' s a -> m s
reviews ≡ views . re reviews (unto f) g ≡ g . f
>>> reviews _Left isRight "mustard" False
>>> reviews (unto succ) (*2) 3 8Usually this function is used in the (->) Monad with a Prism or Iso, in which case it may be useful to think of it as having one of these more restricted type signatures:
reviews :: Iso' s a -> (s -> r) -> a -> r reviews :: Prism' s a -> (s -> r) -> a -> rHowever, when working with a Monad transformer stack, it is sometimes useful to be able to review the current environment, in which case it may be beneficial to think of it as having one of these slightly more liberal type signatures:
reviews :: MonadReader a m => Iso' s a -> (s -> r) -> m r reviews :: MonadReader a m => Prism' s a -> (s -> r) -> m r