summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Hakyll/Core/Item.hs30
-rw-r--r--src/Hakyll/Core/UnixFilter.hs6
-rw-r--r--tests/Hakyll/Core/UnixFilter/Tests.hs2
3 files changed, 28 insertions, 10 deletions
diff --git a/src/Hakyll/Core/Item.hs b/src/Hakyll/Core/Item.hs
index ccf9e9a..8933d5b 100644
--- a/src/Hakyll/Core/Item.hs
+++ b/src/Hakyll/Core/Item.hs
@@ -5,17 +5,21 @@
module Hakyll.Core.Item
( Item (..)
, itemSetBody
- , itemM
+ , withItemBody
) where
--------------------------------------------------------------------------------
-import Control.Applicative ((<$>), (<*>))
-import Data.Binary (Binary (..))
-import Data.Typeable (Typeable)
+import Control.Applicative (Applicative, (<$>), (<*>))
+import Data.Binary (Binary (..))
+import Data.Foldable (Foldable (..))
+import Data.Traversable (Traversable (..))
+import Data.Typeable (Typeable)
+import Prelude hiding (foldr)
--------------------------------------------------------------------------------
+import Hakyll.Core.Compiler.Internal
import Hakyll.Core.Identifier
@@ -32,6 +36,16 @@ instance Functor Item where
--------------------------------------------------------------------------------
+instance Foldable Item where
+ foldr f z (Item _ x) = f x z
+
+
+--------------------------------------------------------------------------------
+instance Traversable Item where
+ traverse f (Item i x) = Item i <$> f x
+
+
+--------------------------------------------------------------------------------
instance Binary a => Binary (Item a) where
put (Item i x) = put i >> put x
get = Item <$> get <*> get
@@ -43,5 +57,9 @@ itemSetBody x (Item i _) = Item i x
--------------------------------------------------------------------------------
-itemM :: Monad m => (a -> m b) -> Item a -> m (Item b)
-itemM f (Item i b) = f b >>= \b' -> return (Item i b')
+-- | Perform a compiler action on the item body. This is the same as 'traverse',
+-- but looks less intimidating.
+--
+-- > withItemBody = traverse
+withItemBody :: (a -> Compiler b) -> Item a -> Compiler (Item b)
+withItemBody = traverse
diff --git a/src/Hakyll/Core/UnixFilter.hs b/src/Hakyll/Core/UnixFilter.hs
index dc82366..e493aee 100644
--- a/src/Hakyll/Core/UnixFilter.hs
+++ b/src/Hakyll/Core/UnixFilter.hs
@@ -26,7 +26,7 @@ import Hakyll.Core.Compiler
-- as a compiler.
--
-- > rev :: Compiler String
--- > rev = getResourceString >>= itemM (unixFilter "rev" [])
+-- > rev = getResourceString >>= withItemBody (unixFilter "rev" [])
--
-- A more realistic example: one can use this to call, for example, the sass
-- compiler on CSS files. More information about sass can be found here:
@@ -38,7 +38,7 @@ import Hakyll.Core.Compiler
-- > match "style.scss" $ do
-- > route $ setExtension "css"
-- > compile $ getResourceString >>=
--- > itemM (unixFilter "sass" ["-s", "--scss"]) >>=
+-- > withItemBody (unixFilter "sass" ["-s", "--scss"]) >>=
-- > compressCssCompiler
unixFilter :: String -- ^ Program name
-> [String] -- ^ Program args
@@ -59,7 +59,7 @@ unixFilter = unixFilterWith writer reader
--
-- > match "music.wav" $ do
-- > route $ setExtension "ogg"
--- > compile $ getResourceLBS >>= unixFilter "oggenc" ["-"]
+-- > compile $ getResourceLBS >>= withItemBody (unixFilter "oggenc" ["-"])
unixFilterLBS :: String -- ^ Program name
-> [String] -- ^ Program args
-> ByteString -- ^ Program input
diff --git a/tests/Hakyll/Core/UnixFilter/Tests.hs b/tests/Hakyll/Core/UnixFilter/Tests.hs
index f5cbf9d..c3e1c99 100644
--- a/tests/Hakyll/Core/UnixFilter/Tests.hs
+++ b/tests/Hakyll/Core/UnixFilter/Tests.hs
@@ -33,5 +33,5 @@ unixFilterRev = withTestStore $ \store -> do
expected <- testCompilerDone store provider "russian.md" getResourceString
H.assert $ rev (itemBody expected) == lines (itemBody output)
where
- compiler = getResourceString >>= itemM (unixFilter "rev" [])
+ compiler = getResourceString >>= withItemBody (unixFilter "rev" [])
rev = map reverse . lines