diff --git a/hakyll.cabal b/hakyll.cabal
--- a/hakyll.cabal
+++ b/hakyll.cabal
@@ -1,5 +1,5 @@
 Name:    hakyll
-Version: 3.2.8.1
+Version: 3.3.0.0
 
 Synopsis: A static website compiler library
 Description:
diff --git a/src/Hakyll/Core/Compiler.hs b/src/Hakyll/Core/Compiler.hs
--- a/src/Hakyll/Core/Compiler.hs
+++ b/src/Hakyll/Core/Compiler.hs
@@ -211,12 +211,12 @@
 --
 getResourceWith :: (ResourceProvider -> Resource -> IO a)
                 -> Compiler Resource a
-getResourceWith reader = fromJob $ \resource -> CompilerM $ do
-    let identifier = unResource resource
+getResourceWith reader = fromJob $ \r -> CompilerM $ do
+    let filePath = unResource r
     provider <- compilerResourceProvider <$> ask
-    if resourceExists provider resource
-        then liftIO $ reader provider resource
-        else throwError $ error' identifier
+    if resourceExists provider r
+        then liftIO $ reader provider r
+        else throwError $ error' filePath
   where
     error' id' =  "Hakyll.Core.Compiler.getResourceWith: resource "
                ++ show id' ++ " not found"
diff --git a/src/Hakyll/Core/Resource.hs b/src/Hakyll/Core/Resource.hs
--- a/src/Hakyll/Core/Resource.hs
+++ b/src/Hakyll/Core/Resource.hs
@@ -1,7 +1,9 @@
 -- | Module exporting the simple 'Resource' type
 --
 module Hakyll.Core.Resource
-    ( Resource (..)
+    ( Resource
+    , unResource
+    , resource
     , fromIdentifier
     , toIdentifier
     ) where
@@ -10,8 +12,13 @@
 
 -- | A resource
 --
-newtype Resource = Resource {unResource :: String}
-                 deriving (Eq, Show, Ord)
+newtype Resource = Resource {unResource :: FilePath}
+    deriving (Eq, Show, Ord)
+
+-- | Smart constructor to ensure we have @/@ as path separator
+--
+resource :: FilePath -> Resource
+resource = fromIdentifier . parseIdentifier
 
 -- | Create a resource from an identifier
 --
diff --git a/src/Hakyll/Core/Resource/Provider.hs b/src/Hakyll/Core/Resource/Provider.hs
--- a/src/Hakyll/Core/Resource/Provider.hs
+++ b/src/Hakyll/Core/Resource/Provider.hs
@@ -68,17 +68,17 @@
 -- | Check if a resource was modified
 --
 resourceModified :: ResourceProvider -> Store -> Resource -> IO Bool
-resourceModified provider store resource = do
+resourceModified provider store r = do
     cache <- readMVar mvar
-    case M.lookup resource cache of
+    case M.lookup r cache of
         -- Already in the cache
         Just m  -> return m
         -- Not yet in the cache, check digests (if it exists)
         Nothing -> do
-            m <- if resourceExists provider resource
-                        then digestModified provider store resource
+            m <- if resourceExists provider r
+                        then digestModified provider store r
                         else return False
-            modifyMVar_ mvar (return . M.insert resource m)
+            modifyMVar_ mvar (return . M.insert r m)
             return m
   where
     mvar = resourceModifiedCache provider
@@ -86,11 +86,11 @@
 -- | Check if a resource digest was modified
 --
 digestModified :: ResourceProvider -> Store -> Resource -> IO Bool
-digestModified provider store resource = do
+digestModified provider store r = do
     -- Get the latest seen digest from the store
     lastDigest <- storeGet store itemName identifier
     -- Calculate the digest for the resource
-    newDigest <- resourceDigest provider resource
+    newDigest <- resourceDigest provider r
     -- Check digests
     if Found newDigest == lastDigest
         -- All is fine, not modified
@@ -99,5 +99,5 @@
         else do storeSet store itemName identifier newDigest
                 return True
   where
-    identifier = toIdentifier resource
+    identifier = toIdentifier r
     itemName = "Hakyll.Core.ResourceProvider.digestModified"
diff --git a/src/Hakyll/Core/Resource/Provider/Dummy.hs b/src/Hakyll/Core/Resource/Provider/Dummy.hs
--- a/src/Hakyll/Core/Resource/Provider/Dummy.hs
+++ b/src/Hakyll/Core/Resource/Provider/Dummy.hs
@@ -19,7 +19,7 @@
 --
 dummyResourceProvider :: Map String ByteString -> IO ResourceProvider
 dummyResourceProvider vfs = makeResourceProvider
-    (map Resource (M.keys vfs))
+    (map resource (M.keys vfs))
     (return . TL.unpack . TL.decodeUtf8 . (vfs M.!) . unResource)
     (return . (vfs M.!) . unResource)
     (const getCurrentTime)
diff --git a/src/Hakyll/Core/Resource/Provider/File.hs b/src/Hakyll/Core/Resource/Provider/File.hs
--- a/src/Hakyll/Core/Resource/Provider/File.hs
+++ b/src/Hakyll/Core/Resource/Provider/File.hs
@@ -22,13 +22,13 @@
 fileResourceProvider :: HakyllConfiguration -> IO ResourceProvider
 fileResourceProvider configuration = do
     -- Retrieve a list of paths
-    list <- map Resource . filter (not . shouldIgnoreFile configuration) <$>
+    list <- map resource . filter (not . shouldIgnoreFile configuration) <$>
         getRecursiveContents False "."
     makeResourceProvider list (readFile . unResource)
                               (LB.readFile . unResource)
-                              mtime
+                              (mtime . unResource)
   where
-    mtime (Resource r) = do
+    mtime r = do
         ct <- toCalendarTime =<< getModificationTime r
         let str = formatCalendarTime defaultTimeLocale "%s" ct
         return $ readTime defaultTimeLocale "%s" str
