{-# LANGUAGE DeriveLift #-} {-# LANGUAGE DeriveTraversable #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE TupleSections #-} {-# LANGUAGE NoImplicitPrelude #-} module Data.Mergeable.Internal.Resolution ( Indexed (..), indexed, fromListT, resolveWith, runResolutionT, ResolutionT, ) where import qualified Data.HashMap.Lazy as HM import Language.Haskell.TH.Syntax (Lift) import Relude sortedEntries :: [Indexed k a] -> [(k, a)] sortedEntries :: forall k a. [Indexed k a] -> [(k, a)] sortedEntries = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap forall {k} {b}. Indexed k b -> (k, b) f forall b c a. (b -> c) -> (a -> b) -> a -> c . forall b a. Ord b => (a -> b) -> [a] -> [a] sortOn forall k a. Indexed k a -> Int index where f :: Indexed k b -> (k, b) f Indexed k b a = (forall k a. Indexed k a -> k indexedKey Indexed k b a, forall k a. Indexed k a -> a indexedValue Indexed k b a) fromListT :: (Monad m, Eq k, Hashable k) => [(k, a)] -> ResolutionT k a coll m coll fromListT :: forall (m :: * -> *) k a coll. (Monad m, Eq k, Hashable k) => [(k, a)] -> ResolutionT k a coll m coll fromListT = forall (t :: * -> *) (f :: * -> *) a b. (Traversable t, Applicative f) => (a -> f b) -> t a -> f (t b) traverse forall (m :: * -> *) k a coll. Monad m => (k, NonEmpty a) -> ResolutionT k a coll m (k, a) resolveDuplicatesM forall b c a. (b -> c) -> (a -> b) -> a -> c . forall k a. (Eq k, Hashable k) => [(k, a)] -> [(k, NonEmpty a)] fromListDuplicates forall (m :: * -> *) a b c. Monad m => (a -> m b) -> (b -> m c) -> a -> m c >=> forall (m :: * -> *) k a coll. Monad m => [(k, a)] -> ResolutionT k a coll m coll fromNoDuplicatesM resolveWith :: Monad m => (a -> a -> m a) -> NonEmpty a -> m a resolveWith :: forall (m :: * -> *) a. Monad m => (a -> a -> m a) -> NonEmpty a -> m a resolveWith a -> a -> m a f (a x :| [a] xs) = forall (t :: * -> *) (m :: * -> *) b a. (Foldable t, Monad m) => (b -> a -> m b) -> b -> t a -> m b foldlM a -> a -> m a f a x [a] xs data Indexed k a = Indexed { forall k a. Indexed k a -> Int index :: Int, forall k a. Indexed k a -> k indexedKey :: k, forall k a. Indexed k a -> a indexedValue :: a } deriving ( Int -> Indexed k a -> ShowS forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a forall k a. (Show k, Show a) => Int -> Indexed k a -> ShowS forall k a. (Show k, Show a) => [Indexed k a] -> ShowS forall k a. (Show k, Show a) => Indexed k a -> String showList :: [Indexed k a] -> ShowS $cshowList :: forall k a. (Show k, Show a) => [Indexed k a] -> ShowS show :: Indexed k a -> String $cshow :: forall k a. (Show k, Show a) => Indexed k a -> String showsPrec :: Int -> Indexed k a -> ShowS $cshowsPrec :: forall k a. (Show k, Show a) => Int -> Indexed k a -> ShowS Show, Indexed k a -> Indexed k a -> Bool forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a forall k a. (Eq k, Eq a) => Indexed k a -> Indexed k a -> Bool /= :: Indexed k a -> Indexed k a -> Bool $c/= :: forall k a. (Eq k, Eq a) => Indexed k a -> Indexed k a -> Bool == :: Indexed k a -> Indexed k a -> Bool $c== :: forall k a. (Eq k, Eq a) => Indexed k a -> Indexed k a -> Bool Eq, forall a b. a -> Indexed k b -> Indexed k a forall a b. (a -> b) -> Indexed k a -> Indexed k b forall k a b. a -> Indexed k b -> Indexed k a forall k a b. (a -> b) -> Indexed k a -> Indexed k b forall (f :: * -> *). (forall a b. (a -> b) -> f a -> f b) -> (forall a b. a -> f b -> f a) -> Functor f <$ :: forall a b. a -> Indexed k b -> Indexed k a $c<$ :: forall k a b. a -> Indexed k b -> Indexed k a fmap :: forall a b. (a -> b) -> Indexed k a -> Indexed k b $cfmap :: forall k a b. (a -> b) -> Indexed k a -> Indexed k b Functor, forall k. Functor (Indexed k) forall {k}. Foldable (Indexed k) forall k (m :: * -> *) a. Monad m => Indexed k (m a) -> m (Indexed k a) forall k (f :: * -> *) a. Applicative f => Indexed k (f a) -> f (Indexed k a) forall k (m :: * -> *) a b. Monad m => (a -> m b) -> Indexed k a -> m (Indexed k b) forall k (f :: * -> *) a b. Applicative f => (a -> f b) -> Indexed k a -> f (Indexed k b) forall (t :: * -> *). Functor t -> Foldable t -> (forall (f :: * -> *) a b. Applicative f => (a -> f b) -> t a -> f (t b)) -> (forall (f :: * -> *) a. Applicative f => t (f a) -> f (t a)) -> (forall (m :: * -> *) a b. Monad m => (a -> m b) -> t a -> m (t b)) -> (forall (m :: * -> *) a. Monad m => t (m a) -> m (t a)) -> Traversable t forall (f :: * -> *) a b. Applicative f => (a -> f b) -> Indexed k a -> f (Indexed k b) sequence :: forall (m :: * -> *) a. Monad m => Indexed k (m a) -> m (Indexed k a) $csequence :: forall k (m :: * -> *) a. Monad m => Indexed k (m a) -> m (Indexed k a) mapM :: forall (m :: * -> *) a b. Monad m => (a -> m b) -> Indexed k a -> m (Indexed k b) $cmapM :: forall k (m :: * -> *) a b. Monad m => (a -> m b) -> Indexed k a -> m (Indexed k b) sequenceA :: forall (f :: * -> *) a. Applicative f => Indexed k (f a) -> f (Indexed k a) $csequenceA :: forall k (f :: * -> *) a. Applicative f => Indexed k (f a) -> f (Indexed k a) traverse :: forall (f :: * -> *) a b. Applicative f => (a -> f b) -> Indexed k a -> f (Indexed k b) $ctraverse :: forall k (f :: * -> *) a b. Applicative f => (a -> f b) -> Indexed k a -> f (Indexed k b) Traversable, forall a. Indexed k a -> Bool forall k a. Eq a => a -> Indexed k a -> Bool forall k a. Num a => Indexed k a -> a forall k a. Ord a => Indexed k a -> a forall m a. Monoid m => (a -> m) -> Indexed k a -> m forall k m. Monoid m => Indexed k m -> m forall k a. Indexed k a -> Bool forall k a. Indexed k a -> Int forall k a. Indexed k a -> [a] forall a b. (a -> b -> b) -> b -> Indexed k a -> b forall k a. (a -> a -> a) -> Indexed k a -> a forall k m a. Monoid m => (a -> m) -> Indexed k a -> m forall k b a. (b -> a -> b) -> b -> Indexed k a -> b forall k a b. (a -> b -> b) -> b -> Indexed k a -> b forall (t :: * -> *). (forall m. Monoid m => t m -> m) -> (forall m a. Monoid m => (a -> m) -> t a -> m) -> (forall m a. Monoid m => (a -> m) -> t a -> m) -> (forall a b. (a -> b -> b) -> b -> t a -> b) -> (forall a b. (a -> b -> b) -> b -> t a -> b) -> (forall b a. (b -> a -> b) -> b -> t a -> b) -> (forall b a. (b -> a -> b) -> b -> t a -> b) -> (forall a. (a -> a -> a) -> t a -> a) -> (forall a. (a -> a -> a) -> t a -> a) -> (forall a. t a -> [a]) -> (forall a. t a -> Bool) -> (forall a. t a -> Int) -> (forall a. Eq a => a -> t a -> Bool) -> (forall a. Ord a => t a -> a) -> (forall a. Ord a => t a -> a) -> (forall a. Num a => t a -> a) -> (forall a. Num a => t a -> a) -> Foldable t product :: forall a. Num a => Indexed k a -> a $cproduct :: forall k a. Num a => Indexed k a -> a sum :: forall a. Num a => Indexed k a -> a $csum :: forall k a. Num a => Indexed k a -> a minimum :: forall a. Ord a => Indexed k a -> a $cminimum :: forall k a. Ord a => Indexed k a -> a maximum :: forall a. Ord a => Indexed k a -> a $cmaximum :: forall k a. Ord a => Indexed k a -> a elem :: forall a. Eq a => a -> Indexed k a -> Bool $celem :: forall k a. Eq a => a -> Indexed k a -> Bool length :: forall a. Indexed k a -> Int $clength :: forall k a. Indexed k a -> Int null :: forall a. Indexed k a -> Bool $cnull :: forall k a. Indexed k a -> Bool toList :: forall a. Indexed k a -> [a] $ctoList :: forall k a. Indexed k a -> [a] foldl1 :: forall a. (a -> a -> a) -> Indexed k a -> a $cfoldl1 :: forall k a. (a -> a -> a) -> Indexed k a -> a foldr1 :: forall a. (a -> a -> a) -> Indexed k a -> a $cfoldr1 :: forall k a. (a -> a -> a) -> Indexed k a -> a foldl' :: forall b a. (b -> a -> b) -> b -> Indexed k a -> b $cfoldl' :: forall k b a. (b -> a -> b) -> b -> Indexed k a -> b foldl :: forall b a. (b -> a -> b) -> b -> Indexed k a -> b $cfoldl :: forall k b a. (b -> a -> b) -> b -> Indexed k a -> b foldr' :: forall a b. (a -> b -> b) -> b -> Indexed k a -> b $cfoldr' :: forall k a b. (a -> b -> b) -> b -> Indexed k a -> b foldr :: forall a b. (a -> b -> b) -> b -> Indexed k a -> b $cfoldr :: forall k a b. (a -> b -> b) -> b -> Indexed k a -> b foldMap' :: forall m a. Monoid m => (a -> m) -> Indexed k a -> m $cfoldMap' :: forall k m a. Monoid m => (a -> m) -> Indexed k a -> m foldMap :: forall m a. Monoid m => (a -> m) -> Indexed k a -> m $cfoldMap :: forall k m a. Monoid m => (a -> m) -> Indexed k a -> m fold :: forall m. Monoid m => Indexed k m -> m $cfold :: forall k m. Monoid m => Indexed k m -> m Foldable, forall k a (m :: * -> *). (Lift k, Lift a, Quote m) => Indexed k a -> m Exp forall k a (m :: * -> *). (Lift k, Lift a, Quote m) => Indexed k a -> Code m (Indexed k a) forall t. (forall (m :: * -> *). Quote m => t -> m Exp) -> (forall (m :: * -> *). Quote m => t -> Code m t) -> Lift t forall (m :: * -> *). Quote m => Indexed k a -> m Exp forall (m :: * -> *). Quote m => Indexed k a -> Code m (Indexed k a) liftTyped :: forall (m :: * -> *). Quote m => Indexed k a -> Code m (Indexed k a) $cliftTyped :: forall k a (m :: * -> *). (Lift k, Lift a, Quote m) => Indexed k a -> Code m (Indexed k a) lift :: forall (m :: * -> *). Quote m => Indexed k a -> m Exp $clift :: forall k a (m :: * -> *). (Lift k, Lift a, Quote m) => Indexed k a -> m Exp Lift ) fromListDuplicates :: (Eq k, Hashable k) => [(k, a)] -> [(k, NonEmpty a)] fromListDuplicates :: forall k a. (Eq k, Hashable k) => [(k, a)] -> [(k, NonEmpty a)] fromListDuplicates [(k, a)] xs = forall k a. [Indexed k a] -> [(k, a)] sortedEntries forall a b. (a -> b) -> a -> b $ forall k v. HashMap k v -> [v] HM.elems forall a b. (a -> b) -> a -> b $ forall k a. (Eq k, Hashable k) => [Indexed k a] -> HashMap k (Indexed k (NonEmpty a)) -> HashMap k (Indexed k (NonEmpty a)) clusterDuplicates (forall k a. [(k, a)] -> [Indexed k a] indexed [(k, a)] xs) forall k v. HashMap k v HM.empty indexed :: [(k, a)] -> [Indexed k a] indexed :: forall k a. [(k, a)] -> [Indexed k a] indexed = forall k a. Int -> [(k, a)] -> [Indexed k a] __indexed Int 0 where __indexed :: Int -> [(k, a)] -> [Indexed k a] __indexed :: forall k a. Int -> [(k, a)] -> [Indexed k a] __indexed Int _ [] = [] __indexed Int i ((k k, a x) : [(k, a)] xs) = forall k a. Int -> k -> a -> Indexed k a Indexed Int i k k a x forall a. a -> [a] -> [a] : forall k a. Int -> [(k, a)] -> [Indexed k a] __indexed (Int i forall a. Num a => a -> a -> a + Int 1) [(k, a)] xs resolveDuplicatesM :: Monad m => (k, NonEmpty a) -> ResolutionT k a coll m (k, a) resolveDuplicatesM :: forall (m :: * -> *) k a coll. Monad m => (k, NonEmpty a) -> ResolutionT k a coll m (k, a) resolveDuplicatesM (k k, NonEmpty a xs) = forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a asks forall k a coll (m :: * -> *). Resolution k a coll m -> NonEmpty a -> m a resolveDuplicates forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b >>= forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift forall b c a. (b -> c) -> (a -> b) -> a -> c . forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap (k k,) forall b c a. (b -> c) -> (a -> b) -> a -> c . (NonEmpty a xs forall a b. a -> (a -> b) -> b &) fromNoDuplicatesM :: Monad m => [(k, a)] -> ResolutionT k a coll m coll fromNoDuplicatesM :: forall (m :: * -> *) k a coll. Monad m => [(k, a)] -> ResolutionT k a coll m coll fromNoDuplicatesM [(k, a)] xs = forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a asks (([(k, a)] xs forall a b. a -> (a -> b) -> b &) forall b c a. (b -> c) -> (a -> b) -> a -> c . forall k a coll (m :: * -> *). Resolution k a coll m -> [(k, a)] -> coll fromNoDuplicates) insertWithList :: (Eq k, Hashable k) => Indexed k (NonEmpty a) -> HashMap k (Indexed k (NonEmpty a)) -> HashMap k (Indexed k (NonEmpty a)) insertWithList :: forall k a. (Eq k, Hashable k) => Indexed k (NonEmpty a) -> HashMap k (Indexed k (NonEmpty a)) -> HashMap k (Indexed k (NonEmpty a)) insertWithList (Indexed Int i1 k key NonEmpty a value) = forall k v. (Eq k, Hashable k) => (Maybe v -> Maybe v) -> k -> HashMap k v -> HashMap k v HM.alter (forall a. a -> Maybe a Just forall b c a. (b -> c) -> (a -> b) -> a -> c . forall {k}. Maybe (Indexed k (NonEmpty a)) -> Indexed k (NonEmpty a) updater) k key where updater :: Maybe (Indexed k (NonEmpty a)) -> Indexed k (NonEmpty a) updater Maybe (Indexed k (NonEmpty a)) Nothing = forall k a. Int -> k -> a -> Indexed k a Indexed Int i1 k key NonEmpty a value updater (Just (Indexed Int i2 k _ NonEmpty a x)) = forall k a. Int -> k -> a -> Indexed k a Indexed Int i2 k key (NonEmpty a x forall a. Semigroup a => a -> a -> a <> NonEmpty a value) clusterDuplicates :: (Eq k, Hashable k) => [Indexed k a] -> HashMap k (Indexed k (NonEmpty a)) -> HashMap k (Indexed k (NonEmpty a)) clusterDuplicates :: forall k a. (Eq k, Hashable k) => [Indexed k a] -> HashMap k (Indexed k (NonEmpty a)) -> HashMap k (Indexed k (NonEmpty a)) clusterDuplicates [] = forall a. a -> a id clusterDuplicates [Indexed k a] xs = forall a b c. (a -> b -> c) -> b -> a -> c flip (forall (t :: * -> *) b a. Foldable t => (b -> a -> b) -> b -> t a -> b foldl' (\HashMap k (Indexed k (NonEmpty a)) coll Indexed k a x -> forall k a. (Eq k, Hashable k) => Indexed k (NonEmpty a) -> HashMap k (Indexed k (NonEmpty a)) -> HashMap k (Indexed k (NonEmpty a)) insertWithList (forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap (forall a. a -> [a] -> NonEmpty a :| []) Indexed k a x) HashMap k (Indexed k (NonEmpty a)) coll)) [Indexed k a] xs data Resolution k a coll m = Resolution { forall k a coll (m :: * -> *). Resolution k a coll m -> NonEmpty a -> m a resolveDuplicates :: NonEmpty a -> m a, forall k a coll (m :: * -> *). Resolution k a coll m -> [(k, a)] -> coll fromNoDuplicates :: [(k, a)] -> coll } runResolutionT :: ResolutionT k a coll m b -> ([(k, a)] -> coll) -> (NonEmpty a -> m a) -> m b runResolutionT :: forall k a coll (m :: * -> *) b. ResolutionT k a coll m b -> ([(k, a)] -> coll) -> (NonEmpty a -> m a) -> m b runResolutionT (ResolutionT ReaderT (Resolution k a coll m) m b x) [(k, a)] -> coll fromNoDuplicates NonEmpty a -> m a resolveDuplicates = forall r (m :: * -> *) a. ReaderT r m a -> r -> m a runReaderT ReaderT (Resolution k a coll m) m b x Resolution {[(k, a)] -> coll NonEmpty a -> m a resolveDuplicates :: NonEmpty a -> m a fromNoDuplicates :: [(k, a)] -> coll fromNoDuplicates :: [(k, a)] -> coll resolveDuplicates :: NonEmpty a -> m a ..} newtype ResolutionT k a coll m x = ResolutionT { forall k a coll (m :: * -> *) x. ResolutionT k a coll m x -> ReaderT (Resolution k a coll m) m x _runResolutionT :: ReaderT (Resolution k a coll m) m x } deriving ( forall a b. a -> ResolutionT k a coll m b -> ResolutionT k a coll m a forall a b. (a -> b) -> ResolutionT k a coll m a -> ResolutionT k a coll m b forall k a coll (m :: * -> *) a b. Functor m => a -> ResolutionT k a coll m b -> ResolutionT k a coll m a forall k a coll (m :: * -> *) a b. Functor m => (a -> b) -> ResolutionT k a coll m a -> ResolutionT k a coll m b forall (f :: * -> *). (forall a b. (a -> b) -> f a -> f b) -> (forall a b. a -> f b -> f a) -> Functor f <$ :: forall a b. a -> ResolutionT k a coll m b -> ResolutionT k a coll m a $c<$ :: forall k a coll (m :: * -> *) a b. Functor m => a -> ResolutionT k a coll m b -> ResolutionT k a coll m a fmap :: forall a b. (a -> b) -> ResolutionT k a coll m a -> ResolutionT k a coll m b $cfmap :: forall k a coll (m :: * -> *) a b. Functor m => (a -> b) -> ResolutionT k a coll m a -> ResolutionT k a coll m b Functor, forall a. a -> ResolutionT k a coll m a forall a b. ResolutionT k a coll m a -> ResolutionT k a coll m b -> ResolutionT k a coll m b forall a b. ResolutionT k a coll m a -> (a -> ResolutionT k a coll m b) -> ResolutionT k a coll m b forall {k} {a} {coll} {m :: * -> *}. Monad m => Applicative (ResolutionT k a coll m) forall k a coll (m :: * -> *) a. Monad m => a -> ResolutionT k a coll m a forall k a coll (m :: * -> *) a b. Monad m => ResolutionT k a coll m a -> ResolutionT k a coll m b -> ResolutionT k a coll m b forall k a coll (m :: * -> *) a b. Monad m => ResolutionT k a coll m a -> (a -> ResolutionT k a coll m b) -> ResolutionT k a coll m b forall (m :: * -> *). Applicative m -> (forall a b. m a -> (a -> m b) -> m b) -> (forall a b. m a -> m b -> m b) -> (forall a. a -> m a) -> Monad m return :: forall a. a -> ResolutionT k a coll m a $creturn :: forall k a coll (m :: * -> *) a. Monad m => a -> ResolutionT k a coll m a >> :: forall a b. ResolutionT k a coll m a -> ResolutionT k a coll m b -> ResolutionT k a coll m b $c>> :: forall k a coll (m :: * -> *) a b. Monad m => ResolutionT k a coll m a -> ResolutionT k a coll m b -> ResolutionT k a coll m b >>= :: forall a b. ResolutionT k a coll m a -> (a -> ResolutionT k a coll m b) -> ResolutionT k a coll m b $c>>= :: forall k a coll (m :: * -> *) a b. Monad m => ResolutionT k a coll m a -> (a -> ResolutionT k a coll m b) -> ResolutionT k a coll m b Monad, forall a. a -> ResolutionT k a coll m a forall a b. ResolutionT k a coll m a -> ResolutionT k a coll m b -> ResolutionT k a coll m a forall a b. ResolutionT k a coll m a -> ResolutionT k a coll m b -> ResolutionT k a coll m b forall a b. ResolutionT k a coll m (a -> b) -> ResolutionT k a coll m a -> ResolutionT k a coll m b forall a b c. (a -> b -> c) -> ResolutionT k a coll m a -> ResolutionT k a coll m b -> ResolutionT k a coll m c forall {k} {a} {coll} {m :: * -> *}. Applicative m => Functor (ResolutionT k a coll m) forall k a coll (m :: * -> *) a. Applicative m => a -> ResolutionT k a coll m a forall k a coll (m :: * -> *) a b. Applicative m => ResolutionT k a coll m a -> ResolutionT k a coll m b -> ResolutionT k a coll m a forall k a coll (m :: * -> *) a b. Applicative m => ResolutionT k a coll m a -> ResolutionT k a coll m b -> ResolutionT k a coll m b forall k a coll (m :: * -> *) a b. Applicative m => ResolutionT k a coll m (a -> b) -> ResolutionT k a coll m a -> ResolutionT k a coll m b forall k a coll (m :: * -> *) a b c. Applicative m => (a -> b -> c) -> ResolutionT k a coll m a -> ResolutionT k a coll m b -> ResolutionT k a coll m c forall (f :: * -> *). Functor f -> (forall a. a -> f a) -> (forall a b. f (a -> b) -> f a -> f b) -> (forall a b c. (a -> b -> c) -> f a -> f b -> f c) -> (forall a b. f a -> f b -> f b) -> (forall a b. f a -> f b -> f a) -> Applicative f <* :: forall a b. ResolutionT k a coll m a -> ResolutionT k a coll m b -> ResolutionT k a coll m a $c<* :: forall k a coll (m :: * -> *) a b. Applicative m => ResolutionT k a coll m a -> ResolutionT k a coll m b -> ResolutionT k a coll m a *> :: forall a b. ResolutionT k a coll m a -> ResolutionT k a coll m b -> ResolutionT k a coll m b $c*> :: forall k a coll (m :: * -> *) a b. Applicative m => ResolutionT k a coll m a -> ResolutionT k a coll m b -> ResolutionT k a coll m b liftA2 :: forall a b c. (a -> b -> c) -> ResolutionT k a coll m a -> ResolutionT k a coll m b -> ResolutionT k a coll m c $cliftA2 :: forall k a coll (m :: * -> *) a b c. Applicative m => (a -> b -> c) -> ResolutionT k a coll m a -> ResolutionT k a coll m b -> ResolutionT k a coll m c <*> :: forall a b. ResolutionT k a coll m (a -> b) -> ResolutionT k a coll m a -> ResolutionT k a coll m b $c<*> :: forall k a coll (m :: * -> *) a b. Applicative m => ResolutionT k a coll m (a -> b) -> ResolutionT k a coll m a -> ResolutionT k a coll m b pure :: forall a. a -> ResolutionT k a coll m a $cpure :: forall k a coll (m :: * -> *) a. Applicative m => a -> ResolutionT k a coll m a Applicative, MonadReader (Resolution k a coll m) ) instance MonadTrans (ResolutionT k a coll) where lift :: forall (m :: * -> *) a. Monad m => m a -> ResolutionT k a coll m a lift = forall k a coll (m :: * -> *) x. ReaderT (Resolution k a coll m) m x -> ResolutionT k a coll m x ResolutionT forall b c a. (b -> c) -> (a -> b) -> a -> c . forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift