{-# LANGUAGE DeriveFoldable #-} {-# LANGUAGE DeriveFunctor #-} {-# LANGUAGE DeriveTraversable #-} {-# LANGUAGE DeriveGeneric #-} module Blagda.Types where import Data.Bifunctor import Data.Aeson import GHC.Generics (Generic) data Post contents meta = Post { Post contents meta -> FilePath p_path :: FilePath , Post contents meta -> contents p_contents :: contents , Post contents meta -> meta p_meta :: meta } deriving (Post contents meta -> Post contents meta -> Bool (Post contents meta -> Post contents meta -> Bool) -> (Post contents meta -> Post contents meta -> Bool) -> Eq (Post contents meta) forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a forall contents meta. (Eq contents, Eq meta) => Post contents meta -> Post contents meta -> Bool /= :: Post contents meta -> Post contents meta -> Bool $c/= :: forall contents meta. (Eq contents, Eq meta) => Post contents meta -> Post contents meta -> Bool == :: Post contents meta -> Post contents meta -> Bool $c== :: forall contents meta. (Eq contents, Eq meta) => Post contents meta -> Post contents meta -> Bool Eq, Eq (Post contents meta) Eq (Post contents meta) -> (Post contents meta -> Post contents meta -> Ordering) -> (Post contents meta -> Post contents meta -> Bool) -> (Post contents meta -> Post contents meta -> Bool) -> (Post contents meta -> Post contents meta -> Bool) -> (Post contents meta -> Post contents meta -> Bool) -> (Post contents meta -> Post contents meta -> Post contents meta) -> (Post contents meta -> Post contents meta -> Post contents meta) -> Ord (Post contents meta) Post contents meta -> Post contents meta -> Bool Post contents meta -> Post contents meta -> Ordering Post contents meta -> Post contents meta -> Post contents meta forall a. Eq a -> (a -> a -> Ordering) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> a) -> (a -> a -> a) -> Ord a forall contents meta. (Ord contents, Ord meta) => Eq (Post contents meta) forall contents meta. (Ord contents, Ord meta) => Post contents meta -> Post contents meta -> Bool forall contents meta. (Ord contents, Ord meta) => Post contents meta -> Post contents meta -> Ordering forall contents meta. (Ord contents, Ord meta) => Post contents meta -> Post contents meta -> Post contents meta min :: Post contents meta -> Post contents meta -> Post contents meta $cmin :: forall contents meta. (Ord contents, Ord meta) => Post contents meta -> Post contents meta -> Post contents meta max :: Post contents meta -> Post contents meta -> Post contents meta $cmax :: forall contents meta. (Ord contents, Ord meta) => Post contents meta -> Post contents meta -> Post contents meta >= :: Post contents meta -> Post contents meta -> Bool $c>= :: forall contents meta. (Ord contents, Ord meta) => Post contents meta -> Post contents meta -> Bool > :: Post contents meta -> Post contents meta -> Bool $c> :: forall contents meta. (Ord contents, Ord meta) => Post contents meta -> Post contents meta -> Bool <= :: Post contents meta -> Post contents meta -> Bool $c<= :: forall contents meta. (Ord contents, Ord meta) => Post contents meta -> Post contents meta -> Bool < :: Post contents meta -> Post contents meta -> Bool $c< :: forall contents meta. (Ord contents, Ord meta) => Post contents meta -> Post contents meta -> Bool compare :: Post contents meta -> Post contents meta -> Ordering $ccompare :: forall contents meta. (Ord contents, Ord meta) => Post contents meta -> Post contents meta -> Ordering $cp1Ord :: forall contents meta. (Ord contents, Ord meta) => Eq (Post contents meta) Ord, Int -> Post contents meta -> ShowS [Post contents meta] -> ShowS Post contents meta -> FilePath (Int -> Post contents meta -> ShowS) -> (Post contents meta -> FilePath) -> ([Post contents meta] -> ShowS) -> Show (Post contents meta) forall a. (Int -> a -> ShowS) -> (a -> FilePath) -> ([a] -> ShowS) -> Show a forall contents meta. (Show contents, Show meta) => Int -> Post contents meta -> ShowS forall contents meta. (Show contents, Show meta) => [Post contents meta] -> ShowS forall contents meta. (Show contents, Show meta) => Post contents meta -> FilePath showList :: [Post contents meta] -> ShowS $cshowList :: forall contents meta. (Show contents, Show meta) => [Post contents meta] -> ShowS show :: Post contents meta -> FilePath $cshow :: forall contents meta. (Show contents, Show meta) => Post contents meta -> FilePath showsPrec :: Int -> Post contents meta -> ShowS $cshowsPrec :: forall contents meta. (Show contents, Show meta) => Int -> Post contents meta -> ShowS Show, a -> Post contents b -> Post contents a (a -> b) -> Post contents a -> Post contents b (forall a b. (a -> b) -> Post contents a -> Post contents b) -> (forall a b. a -> Post contents b -> Post contents a) -> Functor (Post contents) forall a b. a -> Post contents b -> Post contents a forall a b. (a -> b) -> Post contents a -> Post contents b forall contents a b. a -> Post contents b -> Post contents a forall contents a b. (a -> b) -> Post contents a -> Post contents b forall (f :: * -> *). (forall a b. (a -> b) -> f a -> f b) -> (forall a b. a -> f b -> f a) -> Functor f <$ :: a -> Post contents b -> Post contents a $c<$ :: forall contents a b. a -> Post contents b -> Post contents a fmap :: (a -> b) -> Post contents a -> Post contents b $cfmap :: forall contents a b. (a -> b) -> Post contents a -> Post contents b Functor, Post contents a -> Bool (a -> m) -> Post contents a -> m (a -> b -> b) -> b -> Post contents a -> b (forall m. Monoid m => Post contents m -> m) -> (forall m a. Monoid m => (a -> m) -> Post contents a -> m) -> (forall m a. Monoid m => (a -> m) -> Post contents a -> m) -> (forall a b. (a -> b -> b) -> b -> Post contents a -> b) -> (forall a b. (a -> b -> b) -> b -> Post contents a -> b) -> (forall b a. (b -> a -> b) -> b -> Post contents a -> b) -> (forall b a. (b -> a -> b) -> b -> Post contents a -> b) -> (forall a. (a -> a -> a) -> Post contents a -> a) -> (forall a. (a -> a -> a) -> Post contents a -> a) -> (forall a. Post contents a -> [a]) -> (forall a. Post contents a -> Bool) -> (forall a. Post contents a -> Int) -> (forall a. Eq a => a -> Post contents a -> Bool) -> (forall a. Ord a => Post contents a -> a) -> (forall a. Ord a => Post contents a -> a) -> (forall a. Num a => Post contents a -> a) -> (forall a. Num a => Post contents a -> a) -> Foldable (Post contents) forall a. Eq a => a -> Post contents a -> Bool forall a. Num a => Post contents a -> a forall a. Ord a => Post contents a -> a forall m. Monoid m => Post contents m -> m forall a. Post contents a -> Bool forall a. Post contents a -> Int forall a. Post contents a -> [a] forall a. (a -> a -> a) -> Post contents a -> a forall contents a. Eq a => a -> Post contents a -> Bool forall contents a. Num a => Post contents a -> a forall contents a. Ord a => Post contents a -> a forall m a. Monoid m => (a -> m) -> Post contents a -> m forall contents m. Monoid m => Post contents m -> m forall contents a. Post contents a -> Bool forall contents a. Post contents a -> Int forall contents a. Post contents a -> [a] forall b a. (b -> a -> b) -> b -> Post contents a -> b forall a b. (a -> b -> b) -> b -> Post contents a -> b forall contents a. (a -> a -> a) -> Post contents a -> a forall contents m a. Monoid m => (a -> m) -> Post contents a -> m forall contents b a. (b -> a -> b) -> b -> Post contents a -> b forall contents a b. (a -> b -> b) -> b -> Post contents 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 :: Post contents a -> a $cproduct :: forall contents a. Num a => Post contents a -> a sum :: Post contents a -> a $csum :: forall contents a. Num a => Post contents a -> a minimum :: Post contents a -> a $cminimum :: forall contents a. Ord a => Post contents a -> a maximum :: Post contents a -> a $cmaximum :: forall contents a. Ord a => Post contents a -> a elem :: a -> Post contents a -> Bool $celem :: forall contents a. Eq a => a -> Post contents a -> Bool length :: Post contents a -> Int $clength :: forall contents a. Post contents a -> Int null :: Post contents a -> Bool $cnull :: forall contents a. Post contents a -> Bool toList :: Post contents a -> [a] $ctoList :: forall contents a. Post contents a -> [a] foldl1 :: (a -> a -> a) -> Post contents a -> a $cfoldl1 :: forall contents a. (a -> a -> a) -> Post contents a -> a foldr1 :: (a -> a -> a) -> Post contents a -> a $cfoldr1 :: forall contents a. (a -> a -> a) -> Post contents a -> a foldl' :: (b -> a -> b) -> b -> Post contents a -> b $cfoldl' :: forall contents b a. (b -> a -> b) -> b -> Post contents a -> b foldl :: (b -> a -> b) -> b -> Post contents a -> b $cfoldl :: forall contents b a. (b -> a -> b) -> b -> Post contents a -> b foldr' :: (a -> b -> b) -> b -> Post contents a -> b $cfoldr' :: forall contents a b. (a -> b -> b) -> b -> Post contents a -> b foldr :: (a -> b -> b) -> b -> Post contents a -> b $cfoldr :: forall contents a b. (a -> b -> b) -> b -> Post contents a -> b foldMap' :: (a -> m) -> Post contents a -> m $cfoldMap' :: forall contents m a. Monoid m => (a -> m) -> Post contents a -> m foldMap :: (a -> m) -> Post contents a -> m $cfoldMap :: forall contents m a. Monoid m => (a -> m) -> Post contents a -> m fold :: Post contents m -> m $cfold :: forall contents m. Monoid m => Post contents m -> m Foldable, Functor (Post contents) Foldable (Post contents) Functor (Post contents) -> Foldable (Post contents) -> (forall (f :: * -> *) a b. Applicative f => (a -> f b) -> Post contents a -> f (Post contents b)) -> (forall (f :: * -> *) a. Applicative f => Post contents (f a) -> f (Post contents a)) -> (forall (m :: * -> *) a b. Monad m => (a -> m b) -> Post contents a -> m (Post contents b)) -> (forall (m :: * -> *) a. Monad m => Post contents (m a) -> m (Post contents a)) -> Traversable (Post contents) (a -> f b) -> Post contents a -> f (Post contents b) forall contents. Functor (Post contents) forall contents. Foldable (Post contents) forall contents (m :: * -> *) a. Monad m => Post contents (m a) -> m (Post contents a) forall contents (f :: * -> *) a. Applicative f => Post contents (f a) -> f (Post contents a) forall contents (m :: * -> *) a b. Monad m => (a -> m b) -> Post contents a -> m (Post contents b) forall contents (f :: * -> *) a b. Applicative f => (a -> f b) -> Post contents a -> f (Post contents 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 (m :: * -> *) a. Monad m => Post contents (m a) -> m (Post contents a) forall (f :: * -> *) a. Applicative f => Post contents (f a) -> f (Post contents a) forall (m :: * -> *) a b. Monad m => (a -> m b) -> Post contents a -> m (Post contents b) forall (f :: * -> *) a b. Applicative f => (a -> f b) -> Post contents a -> f (Post contents b) sequence :: Post contents (m a) -> m (Post contents a) $csequence :: forall contents (m :: * -> *) a. Monad m => Post contents (m a) -> m (Post contents a) mapM :: (a -> m b) -> Post contents a -> m (Post contents b) $cmapM :: forall contents (m :: * -> *) a b. Monad m => (a -> m b) -> Post contents a -> m (Post contents b) sequenceA :: Post contents (f a) -> f (Post contents a) $csequenceA :: forall contents (f :: * -> *) a. Applicative f => Post contents (f a) -> f (Post contents a) traverse :: (a -> f b) -> Post contents a -> f (Post contents b) $ctraverse :: forall contents (f :: * -> *) a b. Applicative f => (a -> f b) -> Post contents a -> f (Post contents b) $cp2Traversable :: forall contents. Foldable (Post contents) $cp1Traversable :: forall contents. Functor (Post contents) Traversable, (forall x. Post contents meta -> Rep (Post contents meta) x) -> (forall x. Rep (Post contents meta) x -> Post contents meta) -> Generic (Post contents meta) forall x. Rep (Post contents meta) x -> Post contents meta forall x. Post contents meta -> Rep (Post contents meta) x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a forall contents meta x. Rep (Post contents meta) x -> Post contents meta forall contents meta x. Post contents meta -> Rep (Post contents meta) x $cto :: forall contents meta x. Rep (Post contents meta) x -> Post contents meta $cfrom :: forall contents meta x. Post contents meta -> Rep (Post contents meta) x Generic) instance (ToJSON contents, ToJSON meta) => ToJSON (Post contents meta) where toJSON :: Post contents meta -> Value toJSON = Options -> Post contents meta -> Value forall a. (Generic a, GToJSON' Value Zero (Rep a)) => Options -> a -> Value genericToJSON Options defaultOptions { fieldLabelModifier :: ShowS fieldLabelModifier = Int -> ShowS forall a. Int -> [a] -> [a] drop Int 2 } instance Bifunctor Post where bimap :: (a -> b) -> (c -> d) -> Post a c -> Post b d bimap a -> b fab c -> d fcd (Post FilePath s a a c c) = Post :: forall contents meta. FilePath -> contents -> meta -> Post contents meta Post {p_path :: FilePath p_path = FilePath s, p_contents :: b p_contents = a -> b fab a a, p_meta :: d p_meta = c -> d fcd c c}