packages feed

blagda-0.1.0.0: src/Blagda/Types.hs

{-# 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
  { p_path :: FilePath
  , p_contents :: contents
  , p_meta :: meta
  }
  deriving (Eq, Ord, Show, Functor, Foldable, Traversable, Generic)

instance (ToJSON contents, ToJSON meta) => ToJSON (Post contents meta) where
  toJSON = genericToJSON defaultOptions { fieldLabelModifier = drop 2 }

instance Bifunctor Post where
  bimap fab fcd (Post s a c)
    = Post {p_path = s, p_contents = fab a, p_meta = fcd c}