vgrep-0.2.3.0: src/Control/Lens/Compat.hs
{-# LANGUAGE RankNTypes #-}
{-# OPTIONS_GHC -fno-warn-dodgy-imports #-}
module Control.Lens.Compat
( pre
, assign
, modifying
, traverseOf
, Getter
, module Lens.Micro.Platform
) where
import Data.Monoid (First)
import Lens.Micro.Platform hiding (assign, modifying, traverseOf)
import Control.Monad.State (MonadState, modify)
pre :: Getting (First a) s a -> Getter s (Maybe a)
pre l = to (preview l)
{-# INLINE pre #-}
assign :: MonadState s m => ASetter s s a b -> b -> m ()
assign l b = modify (set l b)
{-# INLINE assign #-}
modifying :: MonadState s m => ASetter s s a b -> (a -> b) -> m ()
modifying l f = modify (over l f)
{-# INLINE modifying #-}
traverseOf :: a -> a
traverseOf = id
{-# INLINE traverseOf #-}
type Getter s a = SimpleGetter s a
-- | Build an (index-preserving) 'Getter' from an arbitrary Haskell function.
-- See "Control.Lens".'Lens.to' for details.
--
-- In <https://hackage.haskell.org/package/lens-4.14 lens-4.14>, the constraint
-- @'Functor' f@ is missing from the definition of 'Lens.to'. When compiling
-- with GHC 8.0, this leads to warnings for definitions like
--
-- @
-- foo :: Getter Bar Foo
-- foo = to fooFromBar
-- @
--
-- because of the redundant @'Functor' f@ constraint. This definition is
-- identical to "Control.Lens".'Lens.to' except for the additional constraint
-- @'Functor' f@.
-- to :: (Profunctor p, Functor f, Contravariant f) => (s -> a) -> Optic' p f s a
-- to k = getter
-- where
-- getter = Lens.to k
-- _fakeFunctorConstraint = rmap (fmap undefined) . getter