on master help sign in
Add Resource type for improved type-safety
commit2b9858a8f9212219718625b7c5891bcb11cbaefb authorJasper Van der Jeugt <jaspervdj@gmail.com> dateFri 11 Feb 2011, 17:52 (16 years ago) parentfc6df44
6 files changed+25−15
src/Hakyll/Core/Compiler.hs+4−4 src/Hakyll/Core/ResourceProvider.hs+6−1 src/Hakyll/Core/Rules.hs+4−2 src/Hakyll/Web.hs+6−5 src/Hakyll/Web/Page.hs+2−1 src/Hakyll/Web/Template.hs+3−2
src/Hakyll/Core/Compiler.hs+4−4
@@ -87,7 +87,7 @@ getRouteFor = fromJob $ \identifier -> CompilerM $ do
8787
8888-- | Get the resource we are compiling as a string
8989--
90−getResourceString :: Compiler a String
90+getResourceString :: Compiler Resource String
9191getResourceString = getIdentifier >>> getResourceString'
9292 where
9393 getResourceString' = fromJob $ \id' -> CompilerM $ do
@@ -165,8 +165,8 @@ requireAllA pattern = (id &&& requireAll_ pattern >>>)
165165
166166cached :: (Binary a, Typeable a, Writable a)
167167 => String
168− -> Compiler () a
169− -> Compiler () a
168+ -> Compiler Resource a
169+ -> Compiler Resource a
170170cached name (Compiler d j) = Compiler d $ const $ CompilerM $ do
171171 identifier <- compilerIdentifier <$> ask
172172 store <- compilerStore <$> ask
@@ -174,7 +174,7 @@ cached name (Compiler d j) = Compiler d $ const $ CompilerM $ do
174174 liftIO $ putStrLn $
175175 show identifier ++ ": " ++ if modified then "MODIFIED" else "OK"
176176 if modified
177− then do v <- unCompilerM $ j ()
177+ then do v <- unCompilerM $ j Resource
178178 liftIO $ storeSet store name identifier v
179179 return v
180180 else do v <- liftIO $ storeGet store name identifier
src/Hakyll/Core/ResourceProvider.hs+6−1
@@ -3,7 +3,8 @@
33-- the concrete instance.
44--
55module Hakyll.Core.ResourceProvider
6− ( ResourceProvider (..)
6+ ( Resource (..)
7+ , ResourceProvider (..)
78 , resourceExists
89 , resourceDigest
910 , resourceModified
@@ -19,6 +20,10 @@ import OpenSSL.Digest (MessageDigest (MD5))
1920import Hakyll.Core.Identifier
2021import Hakyll.Core.Store
2122
23+-- | A resource
24+--
25+data Resource = Resource
26+
2227-- | A value responsible for retrieving and listing resources
2328--
2429data ResourceProvider = ResourceProvider
src/Hakyll/Core/Rules.hs+4−2
@@ -39,6 +39,7 @@ import Hakyll.Core.Routes
3939import Hakyll.Core.CompiledItem
4040import Hakyll.Core.Writable
4141import Hakyll.Core.Rules.Internal
42+import Hakyll.Core.Util.Arrow
4243
4344-- | Add a route
4445--
@@ -62,10 +63,11 @@ tellCompilers compilers = RulesM $ tell $ RuleSet mempty $
6263-- happen. In this case, you might want to have a look at 'create'.
6364--
6465compile :: (Binary a, Typeable a, Writable a)
65− => Pattern -> Compiler () a -> Rules
66+ => Pattern -> Compiler Resource a -> Rules
6667compile pattern compiler = RulesM $ do
6768 identifiers <- matches pattern . resourceList <$> ask
68− unRulesM $ tellCompilers $ zip identifiers (repeat compiler)
69+ unRulesM $ tellCompilers $ zip identifiers $ repeat $
70+ constA Resource >>> compiler
6971
7072-- | Add a compilation rule
7173--
src/Hakyll/Web.hs+6−5
@@ -19,6 +19,7 @@ import Text.Hamlet (HamletSettings)
1919import Hakyll.Core.Compiler
2020import Hakyll.Core.Writable
2121import Hakyll.Core.Identifier
22+import Hakyll.Core.ResourceProvider
2223import Hakyll.Web.Page
2324import Hakyll.Web.Pandoc
2425import Hakyll.Web.Template
@@ -26,7 +27,7 @@ import Hakyll.Web.RelativizeUrls
2627import Hakyll.Web.Util.String
2728import Hakyll.Web.CompressCss
2829
29−defaultPageRead :: Compiler () (Page String)
30+defaultPageRead :: Compiler Resource (Page String)
3031defaultPageRead = cached "Hakyll.Web.defaultPageRead" $
3132 pageRead >>> addDefaultFields >>> arr applySelf >>> pageRenderPandoc
3233
@@ -36,17 +37,17 @@ defaultRelativizeUrls = getRoute &&& id >>^ uncurry relativize
3637 relativize Nothing = id
3738 relativize (Just r) = fmap (relativizeUrls $ toSiteRoot r)
3839
39−defaultTemplateRead :: Compiler () Template
40+defaultTemplateRead :: Compiler Resource Template
4041defaultTemplateRead = cached "Hakyll.Web.defaultTemplateRead" $ templateRead
4142
42−defaultTemplateReadWith :: HamletSettings -> Compiler () Template
43+defaultTemplateReadWith :: HamletSettings -> Compiler Resource Template
4344defaultTemplateReadWith settings = cached "Hakyll.Web.defaultTemplateReadWith" $
4445 templateReadWith settings
4546
46−defaultCopyFile :: Compiler () CopyFile
47+defaultCopyFile :: Compiler Resource CopyFile
4748defaultCopyFile = getIdentifier >>^ CopyFile . toFilePath
4849
49−defaultCompressCss :: Compiler () String
50+defaultCompressCss :: Compiler Resource String
5051defaultCompressCss = getResourceString >>^ compressCss
5152
5253defaultApplyTemplate :: Identifier -- ^ Template
src/Hakyll/Web/Page.hs+2−1
@@ -68,6 +68,7 @@ import Data.Ord (comparing)
6868
6969import Hakyll.Core.Identifier
7070import Hakyll.Core.Compiler
71+import Hakyll.Core.ResourceProvider
7172import Hakyll.Web.Page.Internal
7273import Hakyll.Web.Page.Read
7374import Hakyll.Web.Page.Metadata
@@ -90,7 +91,7 @@ toMap (Page m b) = M.insert "body" b m
9091
9192-- | Read a page (do not render it)
9293--
93−pageRead :: Compiler a (Page String)
94+pageRead :: Compiler Resource (Page String)
9495pageRead = getResourceString >>^ readPage
9596
9697-- | Add a number of default metadata fields to a page. These fields include:
src/Hakyll/Web/Template.hs+3−2
@@ -58,6 +58,7 @@ import Text.Hamlet (HamletSettings, defaultHamletSettings)
5858
5959import Hakyll.Core.Compiler
6060import Hakyll.Core.Identifier
61+import Hakyll.Core.ResourceProvider
6162import Hakyll.Web.Template.Internal
6263import Hakyll.Web.Template.Read
6364import Hakyll.Web.Page
@@ -85,12 +86,12 @@ applySelf page = applyTemplate (readTemplate $ pageBody page) page
8586-- @.hml@ or @.hamlet@, it will be considered as a Hamlet template, and parsed
8687-- as such.
8788--
88−templateRead :: Compiler a Template
89+templateRead :: Compiler Resource Template
8990templateRead = templateReadWith defaultHamletSettings
9091
9192-- | Version of 'templateRead' that enables custom settings.
9293--
93−templateReadWith :: HamletSettings -> Compiler a Template
94+templateReadWith :: HamletSettings -> Compiler Resource Template
9495templateReadWith settings =
9596 getIdentifier &&& getResourceString >>^ uncurry read'
9697 where