module Rules.Blog.Paginate.Utils ( grouper , makeId , title ) where import Control.Monad.Reader (asks) import Hakyll import Config.Blog (BlogConfig (..)) import Rules.Blog.Type import Utils (makePageIdentifier) grouper :: (Monad m, MonadMetadata f, MonadFail f) => BlogConfReader n m ([Identifier] -> f [[Identifier]]) grouper :: forall (m :: * -> *) (f :: * -> *) (n :: * -> *). (Monad m, MonadMetadata f, MonadFail f) => BlogConfReader n m ([Identifier] -> f [[Identifier]]) grouper = (BlogConfig n -> [Identifier] -> f [[Identifier]]) -> ReaderT (BlogConfig n) m ([Identifier] -> f [[Identifier]]) forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a asks ((BlogConfig n -> [Identifier] -> f [[Identifier]]) -> ReaderT (BlogConfig n) m ([Identifier] -> f [[Identifier]])) -> (BlogConfig n -> [Identifier] -> f [[Identifier]]) -> ReaderT (BlogConfig n) m ([Identifier] -> f [[Identifier]]) forall a b. (a -> b) -> a -> b $ ((f [Identifier] -> f [[Identifier]]) -> ([Identifier] -> f [Identifier]) -> [Identifier] -> f [[Identifier]]) -> ([Identifier] -> f [Identifier]) -> (f [Identifier] -> f [[Identifier]]) -> [Identifier] -> f [[Identifier]] forall a b c. (a -> b -> c) -> b -> a -> c flip (f [Identifier] -> f [[Identifier]]) -> ([Identifier] -> f [Identifier]) -> [Identifier] -> f [[Identifier]] forall b c a. (b -> c) -> (a -> b) -> a -> c (.) [Identifier] -> f [Identifier] forall (m :: * -> *). (MonadMetadata m, MonadFail m) => [Identifier] -> m [Identifier] sortRecentFirst ((f [Identifier] -> f [[Identifier]]) -> [Identifier] -> f [[Identifier]]) -> (BlogConfig n -> f [Identifier] -> f [[Identifier]]) -> BlogConfig n -> [Identifier] -> f [[Identifier]] forall b c a. (b -> c) -> (a -> b) -> a -> c . ([Identifier] -> [[Identifier]]) -> f [Identifier] -> f [[Identifier]] forall a b. (a -> b) -> f a -> f b forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap (([Identifier] -> [[Identifier]]) -> f [Identifier] -> f [[Identifier]]) -> (BlogConfig n -> [Identifier] -> [[Identifier]]) -> BlogConfig n -> f [Identifier] -> f [[Identifier]] forall b c a. (b -> c) -> (a -> b) -> a -> c . Int -> [Identifier] -> [[Identifier]] forall a. Int -> [a] -> [[a]] paginateEvery (Int -> [Identifier] -> [[Identifier]]) -> (BlogConfig n -> Int) -> BlogConfig n -> [Identifier] -> [[Identifier]] forall b c a. (b -> c) -> (a -> b) -> a -> c . BlogConfig n -> Int forall (m :: * -> *). BlogConfig m -> Int blogPageEntriesNum makeId :: Monad n => (BlogConfig m -> a -> FilePath) -> BlogConfReader m n (a -> PageNumber -> Identifier) makeId :: forall (n :: * -> *) (m :: * -> *) a. Monad n => (BlogConfig m -> a -> FilePath) -> BlogConfReader m n (a -> Int -> Identifier) makeId = ((a -> FilePath) -> a -> Int -> Identifier) -> ReaderT (BlogConfig m) n (a -> FilePath) -> ReaderT (BlogConfig m) n (a -> Int -> Identifier) forall a b. (a -> b) -> ReaderT (BlogConfig m) n a -> ReaderT (BlogConfig m) n b forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap (FilePath -> Int -> Identifier makePageIdentifier (FilePath -> Int -> Identifier) -> (a -> FilePath) -> a -> Int -> Identifier forall b c a. (b -> c) -> (a -> b) -> a -> c .) (ReaderT (BlogConfig m) n (a -> FilePath) -> ReaderT (BlogConfig m) n (a -> Int -> Identifier)) -> ((BlogConfig m -> a -> FilePath) -> ReaderT (BlogConfig m) n (a -> FilePath)) -> (BlogConfig m -> a -> FilePath) -> ReaderT (BlogConfig m) n (a -> Int -> Identifier) forall b c a. (b -> c) -> (a -> b) -> a -> c . (BlogConfig m -> a -> FilePath) -> ReaderT (BlogConfig m) n (a -> FilePath) forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a asks title :: String -> String -> String title :: FilePath -> FilePath -> FilePath title FilePath s FilePath tag = [FilePath] -> FilePath unwords [FilePath s, FilePath "posts:", FilePath tag]