-- | 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