-- | This module exposes a writable type 'WritableTuple' which is a simple
-- newtype wrapper around a tuple.
--
-- The idea is that, given a tuple @(a, b)@, @a@ is the value you actually want
-- to save to the disk, and @b@ is some additional info that you /don't/ want to
-- save, but that you need later, for example in a 'require' clause.
--
{-# LANGUAGE GeneralizedNewtypeDeriving, DeriveDataTypeable #-}
module Hakyll.Core.Writable.WritableTuple
( WritableTuple (..)
, writableTupleFst
, writableTupleSnd
, writableTupleCompiler
) where
import Control.Arrow (arr)
import Data.Typeable (Typeable)
import Data.Binary (Binary)
import Hakyll.Core.Writable
import Hakyll.Core.Compiler
newtype WritableTuple a b = WritableTuple {unWritableTuple :: (a, b)}
deriving (Show, Eq, Ord, Binary, Typeable)
instance Writable a => Writable (WritableTuple a b) where
write dst (WritableTuple (x, _)) = write dst x
writableTupleFst :: WritableTuple a b -> a
writableTupleFst = fst . unWritableTuple
writableTupleSnd :: WritableTuple a b -> b
writableTupleSnd = snd . unWritableTuple
writableTupleCompiler :: Compiler (a, b) (WritableTuple a b)
writableTupleCompiler = arr WritableTuple