content: --------------------------------------------------------------------------------
  -- | Describes writable items; items that can be saved to the disk
  {-# LANGUAGE FlexibleInstances    #-}
  {-# LANGUAGE TypeSynonymInstances #-}
  module Hakyll.Core.Writable
      ( Writable (..)
      ) where
  
  
  --------------------------------------------------------------------------------
  import qualified Data.ByteString                 as SB
  import qualified Data.ByteString.Lazy            as LB
  import           Data.Word                       (Word8)
  import           Text.Blaze.Html                 (Html)
  import           Text.Blaze.Html.Renderer.String (renderHtml)
  
  
  --------------------------------------------------------------------------------
  import           Hakyll.Core.Item
  
  
  --------------------------------------------------------------------------------
  -- | Describes an item that can be saved to the disk
  class Writable a where
      -- | Save an item to the given filepath
      write :: FilePath -> Item a -> IO ()
  
  
  --------------------------------------------------------------------------------
  instance Writable () where
      write _ _ = return ()
  
  
  --------------------------------------------------------------------------------
  instance Writable [Char] where
      write p = writeFile p . itemBody
  
  
  --------------------------------------------------------------------------------
  instance Writable SB.ByteString where
      write p = SB.writeFile p . itemBody
  
  
  --------------------------------------------------------------------------------
  instance Writable LB.ByteString where
      write p = LB.writeFile p . itemBody
  
  
  --------------------------------------------------------------------------------
  instance Writable [Word8] where
      write p = write p . fmap SB.pack
  
  
  --------------------------------------------------------------------------------
  instance Writable Html where
      write p = write p . fmap renderHtml
  