data-foldapp-0.1.0.0: Data/FoldApp/Identity.hs
-- | Specialised functions for folds of function applications. The
-- converter has been specialised to the identity converter.
--
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE TypeApplications #-}
module Data.FoldApp.Identity
( FoldlApp
, FoldrApp
, foldlApp
, foldlMApp
, foldrApp
, foldrMApp
, Monad
)
where
import Control.Monad
( Monad
)
--
import qualified Data.FoldApp.Generic as G
-- | @Data.FoldApp.FoldlApp@ with the identity converter chosen.
--
type FoldlApp p r f = G.FoldlApp (~) p r f
-- | @Data.FoldApp.FoldrAPp@ with the identity converter chosen.
--
type FoldrApp p r f = G.FoldrApp (~) p r f
-- | Left-associative fold of function applications.
--
foldlApp ::
forall p r f.
(FoldlApp p r f) =>
(r -> p -> r) -> r -> f
foldlApp = G.foldlApp @(~)
-- | Monadic left-associative fold of function applications.
--
foldlMApp ::
forall m p r f.
(Monad m, FoldlApp p (m r) f) =>
(r -> p -> m r) -> r -> f
foldlMApp = G.foldlMApp @(~)
-- | Right-associative fold of function applications.
--
foldrApp ::
forall p r f.
FoldrApp p r f =>
(p -> r -> r) -> r -> f
foldrApp = G.foldrApp @(~)
-- | Monadic right-associative fold of function applications.
--
foldrMApp ::
forall m p r f.
(Monad m, FoldrApp p (m r) f) =>
(p -> r -> m r) -> r -> f
foldrMApp = G.foldrMApp @(~)