CompactFold [] Source # | |
Methods compactFold :: Foldable g => [g a] -> [a] Source # separateFold :: Bifoldable g => [g a b] -> ([a], [b]) Source # fmapFold :: (Functor [], Foldable g) => (a -> g b) -> [a] -> [b] Source # fmapBifold :: (Functor [], Bifoldable g) => (a -> g l r) -> [a] -> ([l], [r]) Source # applyFold :: (Applicative [], Foldable g) => [a -> g b] -> [a] -> [b] Source # applyBifold :: (Applicative [], Bifoldable g) => [a -> g l r] -> [a] -> ([l], [r]) Source # bindFold :: (Monad [], Foldable g) => [a] -> (a -> [g b]) -> [b] Source # bindBifold :: (Monad [], Bifoldable g) => [a] -> (a -> [g l r]) -> ([l], [r]) Source # traverseFold :: (Applicative h, Foldable g, Traversable []) => (a -> h (g b)) -> [a] -> h [b] Source # traverseBifold :: (Applicative h, Bifoldable g, Traversable []) => (a -> h (g l r)) -> [a] -> h ([l], [r]) Source # |
CompactFold Maybe Source # | |
Methods compactFold :: Foldable g => Maybe (g a) -> Maybe a Source # separateFold :: Bifoldable g => Maybe (g a b) -> (Maybe a, Maybe b) Source # fmapFold :: (Functor Maybe, Foldable g) => (a -> g b) -> Maybe a -> Maybe b Source # fmapBifold :: (Functor Maybe, Bifoldable g) => (a -> g l r) -> Maybe a -> (Maybe l, Maybe r) Source # applyFold :: (Applicative Maybe, Foldable g) => Maybe (a -> g b) -> Maybe a -> Maybe b Source # applyBifold :: (Applicative Maybe, Bifoldable g) => Maybe (a -> g l r) -> Maybe a -> (Maybe l, Maybe r) Source # bindFold :: (Monad Maybe, Foldable g) => Maybe a -> (a -> Maybe (g b)) -> Maybe b Source # bindBifold :: (Monad Maybe, Bifoldable g) => Maybe a -> (a -> Maybe (g l r)) -> (Maybe l, Maybe r) Source # traverseFold :: (Applicative h, Foldable g, Traversable Maybe) => (a -> h (g b)) -> Maybe a -> h (Maybe b) Source # traverseBifold :: (Applicative h, Bifoldable g, Traversable Maybe) => (a -> h (g l r)) -> Maybe a -> h (Maybe l, Maybe r) Source # |
CompactFold IO Source # | |
Methods compactFold :: Foldable g => IO (g a) -> IO a Source # separateFold :: Bifoldable g => IO (g a b) -> (IO a, IO b) Source # fmapFold :: (Functor IO, Foldable g) => (a -> g b) -> IO a -> IO b Source # fmapBifold :: (Functor IO, Bifoldable g) => (a -> g l r) -> IO a -> (IO l, IO r) Source # applyFold :: (Applicative IO, Foldable g) => IO (a -> g b) -> IO a -> IO b Source # applyBifold :: (Applicative IO, Bifoldable g) => IO (a -> g l r) -> IO a -> (IO l, IO r) Source # bindFold :: (Monad IO, Foldable g) => IO a -> (a -> IO (g b)) -> IO b Source # bindBifold :: (Monad IO, Bifoldable g) => IO a -> (a -> IO (g l r)) -> (IO l, IO r) Source # traverseFold :: (Applicative h, Foldable g, Traversable IO) => (a -> h (g b)) -> IO a -> h (IO b) Source # traverseBifold :: (Applicative h, Bifoldable g, Traversable IO) => (a -> h (g l r)) -> IO a -> h (IO l, IO r) Source # |
CompactFold Option Source # | |
Methods compactFold :: Foldable g => Option (g a) -> Option a Source # separateFold :: Bifoldable g => Option (g a b) -> (Option a, Option b) Source # fmapFold :: (Functor Option, Foldable g) => (a -> g b) -> Option a -> Option b Source # fmapBifold :: (Functor Option, Bifoldable g) => (a -> g l r) -> Option a -> (Option l, Option r) Source # applyFold :: (Applicative Option, Foldable g) => Option (a -> g b) -> Option a -> Option b Source # applyBifold :: (Applicative Option, Bifoldable g) => Option (a -> g l r) -> Option a -> (Option l, Option r) Source # bindFold :: (Monad Option, Foldable g) => Option a -> (a -> Option (g b)) -> Option b Source # bindBifold :: (Monad Option, Bifoldable g) => Option a -> (a -> Option (g l r)) -> (Option l, Option r) Source # traverseFold :: (Applicative h, Foldable g, Traversable Option) => (a -> h (g b)) -> Option a -> h (Option b) Source # traverseBifold :: (Applicative h, Bifoldable g, Traversable Option) => (a -> h (g l r)) -> Option a -> h (Option l, Option r) Source # |
CompactFold ZipList Source # | |
Methods compactFold :: Foldable g => ZipList (g a) -> ZipList a Source # separateFold :: Bifoldable g => ZipList (g a b) -> (ZipList a, ZipList b) Source # fmapFold :: (Functor ZipList, Foldable g) => (a -> g b) -> ZipList a -> ZipList b Source # fmapBifold :: (Functor ZipList, Bifoldable g) => (a -> g l r) -> ZipList a -> (ZipList l, ZipList r) Source # applyFold :: (Applicative ZipList, Foldable g) => ZipList (a -> g b) -> ZipList a -> ZipList b Source # applyBifold :: (Applicative ZipList, Bifoldable g) => ZipList (a -> g l r) -> ZipList a -> (ZipList l, ZipList r) Source # bindFold :: (Monad ZipList, Foldable g) => ZipList a -> (a -> ZipList (g b)) -> ZipList b Source # bindBifold :: (Monad ZipList, Bifoldable g) => ZipList a -> (a -> ZipList (g l r)) -> (ZipList l, ZipList r) Source # traverseFold :: (Applicative h, Foldable g, Traversable ZipList) => (a -> h (g b)) -> ZipList a -> h (ZipList b) Source # traverseBifold :: (Applicative h, Bifoldable g, Traversable ZipList) => (a -> h (g l r)) -> ZipList a -> h (ZipList l, ZipList r) Source # |
CompactFold STM Source # | |
Methods compactFold :: Foldable g => STM (g a) -> STM a Source # separateFold :: Bifoldable g => STM (g a b) -> (STM a, STM b) Source # fmapFold :: (Functor STM, Foldable g) => (a -> g b) -> STM a -> STM b Source # fmapBifold :: (Functor STM, Bifoldable g) => (a -> g l r) -> STM a -> (STM l, STM r) Source # applyFold :: (Applicative STM, Foldable g) => STM (a -> g b) -> STM a -> STM b Source # applyBifold :: (Applicative STM, Bifoldable g) => STM (a -> g l r) -> STM a -> (STM l, STM r) Source # bindFold :: (Monad STM, Foldable g) => STM a -> (a -> STM (g b)) -> STM b Source # bindBifold :: (Monad STM, Bifoldable g) => STM a -> (a -> STM (g l r)) -> (STM l, STM r) Source # traverseFold :: (Applicative h, Foldable g, Traversable STM) => (a -> h (g b)) -> STM a -> h (STM b) Source # traverseBifold :: (Applicative h, Bifoldable g, Traversable STM) => (a -> h (g l r)) -> STM a -> h (STM l, STM r) Source # |
CompactFold ReadPrec Source # | |
Methods compactFold :: Foldable g => ReadPrec (g a) -> ReadPrec a Source # separateFold :: Bifoldable g => ReadPrec (g a b) -> (ReadPrec a, ReadPrec b) Source # fmapFold :: (Functor ReadPrec, Foldable g) => (a -> g b) -> ReadPrec a -> ReadPrec b Source # fmapBifold :: (Functor ReadPrec, Bifoldable g) => (a -> g l r) -> ReadPrec a -> (ReadPrec l, ReadPrec r) Source # applyFold :: (Applicative ReadPrec, Foldable g) => ReadPrec (a -> g b) -> ReadPrec a -> ReadPrec b Source # applyBifold :: (Applicative ReadPrec, Bifoldable g) => ReadPrec (a -> g l r) -> ReadPrec a -> (ReadPrec l, ReadPrec r) Source # bindFold :: (Monad ReadPrec, Foldable g) => ReadPrec a -> (a -> ReadPrec (g b)) -> ReadPrec b Source # bindBifold :: (Monad ReadPrec, Bifoldable g) => ReadPrec a -> (a -> ReadPrec (g l r)) -> (ReadPrec l, ReadPrec r) Source # traverseFold :: (Applicative h, Foldable g, Traversable ReadPrec) => (a -> h (g b)) -> ReadPrec a -> h (ReadPrec b) Source # traverseBifold :: (Applicative h, Bifoldable g, Traversable ReadPrec) => (a -> h (g l r)) -> ReadPrec a -> h (ReadPrec l, ReadPrec r) Source # |
CompactFold ReadP Source # | |
Methods compactFold :: Foldable g => ReadP (g a) -> ReadP a Source # separateFold :: Bifoldable g => ReadP (g a b) -> (ReadP a, ReadP b) Source # fmapFold :: (Functor ReadP, Foldable g) => (a -> g b) -> ReadP a -> ReadP b Source # fmapBifold :: (Functor ReadP, Bifoldable g) => (a -> g l r) -> ReadP a -> (ReadP l, ReadP r) Source # applyFold :: (Applicative ReadP, Foldable g) => ReadP (a -> g b) -> ReadP a -> ReadP b Source # applyBifold :: (Applicative ReadP, Bifoldable g) => ReadP (a -> g l r) -> ReadP a -> (ReadP l, ReadP r) Source # bindFold :: (Monad ReadP, Foldable g) => ReadP a -> (a -> ReadP (g b)) -> ReadP b Source # bindBifold :: (Monad ReadP, Bifoldable g) => ReadP a -> (a -> ReadP (g l r)) -> (ReadP l, ReadP r) Source # traverseFold :: (Applicative h, Foldable g, Traversable ReadP) => (a -> h (g b)) -> ReadP a -> h (ReadP b) Source # traverseBifold :: (Applicative h, Bifoldable g, Traversable ReadP) => (a -> h (g l r)) -> ReadP a -> h (ReadP l, ReadP r) Source # |
CompactFold (U1 *) Source # | |
Methods compactFold :: Foldable g => U1 * (g a) -> U1 * a Source # separateFold :: Bifoldable g => U1 * (g a b) -> (U1 * a, U1 * b) Source # fmapFold :: (Functor (U1 *), Foldable g) => (a -> g b) -> U1 * a -> U1 * b Source # fmapBifold :: (Functor (U1 *), Bifoldable g) => (a -> g l r) -> U1 * a -> (U1 * l, U1 * r) Source # applyFold :: (Applicative (U1 *), Foldable g) => U1 * (a -> g b) -> U1 * a -> U1 * b Source # applyBifold :: (Applicative (U1 *), Bifoldable g) => U1 * (a -> g l r) -> U1 * a -> (U1 * l, U1 * r) Source # bindFold :: (Monad (U1 *), Foldable g) => U1 * a -> (a -> U1 * (g b)) -> U1 * b Source # bindBifold :: (Monad (U1 *), Bifoldable g) => U1 * a -> (a -> U1 * (g l r)) -> (U1 * l, U1 * r) Source # traverseFold :: (Applicative h, Foldable g, Traversable (U1 *)) => (a -> h (g b)) -> U1 * a -> h (U1 * b) Source # traverseBifold :: (Applicative h, Bifoldable g, Traversable (U1 *)) => (a -> h (g l r)) -> U1 * a -> h (U1 * l, U1 * r) Source # |
MonadPlus a => CompactFold (WrappedMonad a) Source # | |
Methods compactFold :: Foldable g => WrappedMonad a (g a) -> WrappedMonad a a Source # separateFold :: Bifoldable g => WrappedMonad a (g a b) -> (WrappedMonad a a, WrappedMonad a b) Source # fmapFold :: (Functor (WrappedMonad a), Foldable g) => (a -> g b) -> WrappedMonad a a -> WrappedMonad a b Source # fmapBifold :: (Functor (WrappedMonad a), Bifoldable g) => (a -> g l r) -> WrappedMonad a a -> (WrappedMonad a l, WrappedMonad a r) Source # applyFold :: (Applicative (WrappedMonad a), Foldable g) => WrappedMonad a (a -> g b) -> WrappedMonad a a -> WrappedMonad a b Source # applyBifold :: (Applicative (WrappedMonad a), Bifoldable g) => WrappedMonad a (a -> g l r) -> WrappedMonad a a -> (WrappedMonad a l, WrappedMonad a r) Source # bindFold :: (Monad (WrappedMonad a), Foldable g) => WrappedMonad a a -> (a -> WrappedMonad a (g b)) -> WrappedMonad a b Source # bindBifold :: (Monad (WrappedMonad a), Bifoldable g) => WrappedMonad a a -> (a -> WrappedMonad a (g l r)) -> (WrappedMonad a l, WrappedMonad a r) Source # traverseFold :: (Applicative h, Foldable g, Traversable (WrappedMonad a)) => (a -> h (g b)) -> WrappedMonad a a -> h (WrappedMonad a b) Source # traverseBifold :: (Applicative h, Bifoldable g, Traversable (WrappedMonad a)) => (a -> h (g l r)) -> WrappedMonad a a -> h (WrappedMonad a l, WrappedMonad a r) Source # |
(ArrowPlus a, ArrowApply a) => CompactFold (ArrowMonad a) Source # | |
Methods compactFold :: Foldable g => ArrowMonad a (g a) -> ArrowMonad a a Source # separateFold :: Bifoldable g => ArrowMonad a (g a b) -> (ArrowMonad a a, ArrowMonad a b) Source # fmapFold :: (Functor (ArrowMonad a), Foldable g) => (a -> g b) -> ArrowMonad a a -> ArrowMonad a b Source # fmapBifold :: (Functor (ArrowMonad a), Bifoldable g) => (a -> g l r) -> ArrowMonad a a -> (ArrowMonad a l, ArrowMonad a r) Source # applyFold :: (Applicative (ArrowMonad a), Foldable g) => ArrowMonad a (a -> g b) -> ArrowMonad a a -> ArrowMonad a b Source # applyBifold :: (Applicative (ArrowMonad a), Bifoldable g) => ArrowMonad a (a -> g l r) -> ArrowMonad a a -> (ArrowMonad a l, ArrowMonad a r) Source # bindFold :: (Monad (ArrowMonad a), Foldable g) => ArrowMonad a a -> (a -> ArrowMonad a (g b)) -> ArrowMonad a b Source # bindBifold :: (Monad (ArrowMonad a), Bifoldable g) => ArrowMonad a a -> (a -> ArrowMonad a (g l r)) -> (ArrowMonad a l, ArrowMonad a r) Source # traverseFold :: (Applicative h, Foldable g, Traversable (ArrowMonad a)) => (a -> h (g b)) -> ArrowMonad a a -> h (ArrowMonad a b) Source # traverseBifold :: (Applicative h, Bifoldable g, Traversable (ArrowMonad a)) => (a -> h (g l r)) -> ArrowMonad a a -> h (ArrowMonad a l, ArrowMonad a r) Source # |
CompactFold (Proxy *) Source # | |
Methods compactFold :: Foldable g => Proxy * (g a) -> Proxy * a Source # separateFold :: Bifoldable g => Proxy * (g a b) -> (Proxy * a, Proxy * b) Source # fmapFold :: (Functor (Proxy *), Foldable g) => (a -> g b) -> Proxy * a -> Proxy * b Source # fmapBifold :: (Functor (Proxy *), Bifoldable g) => (a -> g l r) -> Proxy * a -> (Proxy * l, Proxy * r) Source # applyFold :: (Applicative (Proxy *), Foldable g) => Proxy * (a -> g b) -> Proxy * a -> Proxy * b Source # applyBifold :: (Applicative (Proxy *), Bifoldable g) => Proxy * (a -> g l r) -> Proxy * a -> (Proxy * l, Proxy * r) Source # bindFold :: (Monad (Proxy *), Foldable g) => Proxy * a -> (a -> Proxy * (g b)) -> Proxy * b Source # bindBifold :: (Monad (Proxy *), Bifoldable g) => Proxy * a -> (a -> Proxy * (g l r)) -> (Proxy * l, Proxy * r) Source # traverseFold :: (Applicative h, Foldable g, Traversable (Proxy *)) => (a -> h (g b)) -> Proxy * a -> h (Proxy * b) Source # traverseBifold :: (Applicative h, Bifoldable g, Traversable (Proxy *)) => (a -> h (g l r)) -> Proxy * a -> h (Proxy * l, Proxy * r) Source # |
(Alternative a, Monad a) => CompactFold (Rec1 * a) Source # | |
Methods compactFold :: Foldable g => Rec1 * a (g a) -> Rec1 * a a Source # separateFold :: Bifoldable g => Rec1 * a (g a b) -> (Rec1 * a a, Rec1 * a b) Source # fmapFold :: (Functor (Rec1 * a), Foldable g) => (a -> g b) -> Rec1 * a a -> Rec1 * a b Source # fmapBifold :: (Functor (Rec1 * a), Bifoldable g) => (a -> g l r) -> Rec1 * a a -> (Rec1 * a l, Rec1 * a r) Source # applyFold :: (Applicative (Rec1 * a), Foldable g) => Rec1 * a (a -> g b) -> Rec1 * a a -> Rec1 * a b Source # applyBifold :: (Applicative (Rec1 * a), Bifoldable g) => Rec1 * a (a -> g l r) -> Rec1 * a a -> (Rec1 * a l, Rec1 * a r) Source # bindFold :: (Monad (Rec1 * a), Foldable g) => Rec1 * a a -> (a -> Rec1 * a (g b)) -> Rec1 * a b Source # bindBifold :: (Monad (Rec1 * a), Bifoldable g) => Rec1 * a a -> (a -> Rec1 * a (g l r)) -> (Rec1 * a l, Rec1 * a r) Source # traverseFold :: (Applicative h, Foldable g, Traversable (Rec1 * a)) => (a -> h (g b)) -> Rec1 * a a -> h (Rec1 * a b) Source # traverseBifold :: (Applicative h, Bifoldable g, Traversable (Rec1 * a)) => (a -> h (g l r)) -> Rec1 * a a -> h (Rec1 * a l, Rec1 * a r) Source # |
(Alternative a, Monad a) => CompactFold (Alt * a) Source # | |
Methods compactFold :: Foldable g => Alt * a (g a) -> Alt * a a Source # separateFold :: Bifoldable g => Alt * a (g a b) -> (Alt * a a, Alt * a b) Source # fmapFold :: (Functor (Alt * a), Foldable g) => (a -> g b) -> Alt * a a -> Alt * a b Source # fmapBifold :: (Functor (Alt * a), Bifoldable g) => (a -> g l r) -> Alt * a a -> (Alt * a l, Alt * a r) Source # applyFold :: (Applicative (Alt * a), Foldable g) => Alt * a (a -> g b) -> Alt * a a -> Alt * a b Source # applyBifold :: (Applicative (Alt * a), Bifoldable g) => Alt * a (a -> g l r) -> Alt * a a -> (Alt * a l, Alt * a r) Source # bindFold :: (Monad (Alt * a), Foldable g) => Alt * a a -> (a -> Alt * a (g b)) -> Alt * a b Source # bindBifold :: (Monad (Alt * a), Bifoldable g) => Alt * a a -> (a -> Alt * a (g l r)) -> (Alt * a l, Alt * a r) Source # traverseFold :: (Applicative h, Foldable g, Traversable (Alt * a)) => (a -> h (g b)) -> Alt * a a -> h (Alt * a b) Source # traverseBifold :: (Applicative h, Bifoldable g, Traversable (Alt * a)) => (a -> h (g l r)) -> Alt * a a -> h (Alt * a l, Alt * a r) Source # |
(Alternative f, Monad f, Alternative g, Monad g) => CompactFold ((:*:) * f g) Source # | |
Methods compactFold :: Foldable g => (* :*: f) g (g a) -> (* :*: f) g a Source # separateFold :: Bifoldable g => (* :*: f) g (g a b) -> ((* :*: f) g a, (* :*: f) g b) Source # fmapFold :: (Functor ((* :*: f) g), Foldable g) => (a -> g b) -> (* :*: f) g a -> (* :*: f) g b Source # fmapBifold :: (Functor ((* :*: f) g), Bifoldable g) => (a -> g l r) -> (* :*: f) g a -> ((* :*: f) g l, (* :*: f) g r) Source # applyFold :: (Applicative ((* :*: f) g), Foldable g) => (* :*: f) g (a -> g b) -> (* :*: f) g a -> (* :*: f) g b Source # applyBifold :: (Applicative ((* :*: f) g), Bifoldable g) => (* :*: f) g (a -> g l r) -> (* :*: f) g a -> ((* :*: f) g l, (* :*: f) g r) Source # bindFold :: (Monad ((* :*: f) g), Foldable g) => (* :*: f) g a -> (a -> (* :*: f) g (g b)) -> (* :*: f) g b Source # bindBifold :: (Monad ((* :*: f) g), Bifoldable g) => (* :*: f) g a -> (a -> (* :*: f) g (g l r)) -> ((* :*: f) g l, (* :*: f) g r) Source # traverseFold :: (Applicative h, Foldable g, Traversable ((* :*: f) g)) => (a -> h (g b)) -> (* :*: f) g a -> h ((* :*: f) g b) Source # traverseBifold :: (Applicative h, Bifoldable g, Traversable ((* :*: f) g)) => (a -> h (g l r)) -> (* :*: f) g a -> h ((* :*: f) g l, (* :*: f) g r) Source # |
(Compactable f, Alternative f, Monad f, Compactable g, Alternative g, Monad g) => CompactFold (Product * f g) Source # | |
Methods compactFold :: Foldable g => Product * f g (g a) -> Product * f g a Source # separateFold :: Bifoldable g => Product * f g (g a b) -> (Product * f g a, Product * f g b) Source # fmapFold :: (Functor (Product * f g), Foldable g) => (a -> g b) -> Product * f g a -> Product * f g b Source # fmapBifold :: (Functor (Product * f g), Bifoldable g) => (a -> g l r) -> Product * f g a -> (Product * f g l, Product * f g r) Source # applyFold :: (Applicative (Product * f g), Foldable g) => Product * f g (a -> g b) -> Product * f g a -> Product * f g b Source # applyBifold :: (Applicative (Product * f g), Bifoldable g) => Product * f g (a -> g l r) -> Product * f g a -> (Product * f g l, Product * f g r) Source # bindFold :: (Monad (Product * f g), Foldable g) => Product * f g a -> (a -> Product * f g (g b)) -> Product * f g b Source # bindBifold :: (Monad (Product * f g), Bifoldable g) => Product * f g a -> (a -> Product * f g (g l r)) -> (Product * f g l, Product * f g r) Source # traverseFold :: (Applicative h, Foldable g, Traversable (Product * f g)) => (a -> h (g b)) -> Product * f g a -> h (Product * f g b) Source # traverseBifold :: (Applicative h, Bifoldable g, Traversable (Product * f g)) => (a -> h (g l r)) -> Product * f g a -> h (Product * f g l, Product * f g r) Source # |
(Alternative f, Monad f) => CompactFold (M1 * i c f) Source # | |
Methods compactFold :: Foldable g => M1 * i c f (g a) -> M1 * i c f a Source # separateFold :: Bifoldable g => M1 * i c f (g a b) -> (M1 * i c f a, M1 * i c f b) Source # fmapFold :: (Functor (M1 * i c f), Foldable g) => (a -> g b) -> M1 * i c f a -> M1 * i c f b Source # fmapBifold :: (Functor (M1 * i c f), Bifoldable g) => (a -> g l r) -> M1 * i c f a -> (M1 * i c f l, M1 * i c f r) Source # applyFold :: (Applicative (M1 * i c f), Foldable g) => M1 * i c f (a -> g b) -> M1 * i c f a -> M1 * i c f b Source # applyBifold :: (Applicative (M1 * i c f), Bifoldable g) => M1 * i c f (a -> g l r) -> M1 * i c f a -> (M1 * i c f l, M1 * i c f r) Source # bindFold :: (Monad (M1 * i c f), Foldable g) => M1 * i c f a -> (a -> M1 * i c f (g b)) -> M1 * i c f b Source # bindBifold :: (Monad (M1 * i c f), Bifoldable g) => M1 * i c f a -> (a -> M1 * i c f (g l r)) -> (M1 * i c f l, M1 * i c f r) Source # traverseFold :: (Applicative h, Foldable g, Traversable (M1 * i c f)) => (a -> h (g b)) -> M1 * i c f a -> h (M1 * i c f b) Source # traverseBifold :: (Applicative h, Bifoldable g, Traversable (M1 * i c f)) => (a -> h (g l r)) -> M1 * i c f a -> h (M1 * i c f l, M1 * i c f r) Source # |