summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Hakyll/Web/Page.hs31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/Hakyll/Web/Page.hs b/src/Hakyll/Web/Page.hs
new file mode 100644
index 0000000..151364f
--- /dev/null
+++ b/src/Hakyll/Web/Page.hs
@@ -0,0 +1,31 @@
+-- | A page is an important concept in Hakyll: it has a body (usually of the
+-- type 'String') and number of metadata fields. This type is used to represent
+-- pages on your website.
+--
+module Hakyll.Web.Page
+ ( Page (..)
+ , toMap
+ ) where
+
+import Data.Map (Map)
+import qualified Data.Map as M
+
+import Hakyll.Core.Writable
+
+-- | Type used to represent pages
+--
+data Page a = Page
+ { pageMetadata :: Map String String
+ , pageBody :: a
+ }
+
+instance Functor Page where
+ fmap f (Page m b) = Page m (f b)
+
+instance Writable a => Writable (Page a) where
+ write p (Page _ b) = write p b
+
+-- | Convert a page to a map. The body will be placed in the @body@ key.
+--
+toMap :: Page String -> Map String String
+toMap (Page m b) = M.insert "body" b m