Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
An identifier is a type used to uniquely name an item. An identifier is similar to a file path, but can contain additional details (e.g. item's version). Examples of identifiers are:
posts/foo.markdown
index
error/404
See Identifier
for details.
Synopsis
- data Identifier
- fromFilePath :: FilePath -> Identifier
- toFilePath :: Identifier -> FilePath
- identifierVersion :: Identifier -> Maybe String
- setVersion :: Maybe String -> Identifier -> Identifier
Documentation
data Identifier Source #
A key data type to identify a compiled Item
in the Store
.
Conceptually, it's a combination of a file path and a version name.
The version is used only when a file is
compiled within a rule using the version
wrapper function
(the same source file
can be compiled into several items in the store, so the version exists to distinguish
them).
Use functions like fromFilePath
, setVersion
, getMatches
to build an Identifier
.
Usage Examples
Normally, compiled items are saved to the store by Rules
with an automatic, implicit identifier
and loaded from the store by the user in another rule with a manual, explicit identifier.
Identifiers when using match.
Using match
builds an implicit identifier that corresponds to the expanded, relative path
of the source file on disk (relative to the project directory configured
with providerDirectory
):
-- e.g. file on disk: 'posts/hakyll.md' match "posts/*" $ do -- saved with implicit identifier 'posts/hakyll.md' compile pandocCompiler match "about/*" $ do compile $ do compiledPost <- load (fromFilePath "posts/hakyll.md") -- load with explicit identifier ...
Normally, the identifier is only explicitly created to pass to one of the load
functions.
Identifiers when using create.
Using create
(thereby inventing a file path with no underlying file on disk)
builds an implicit identifier that corresponds to the invented file path:
create ["index.html"] $ do -- saved with implicit identifier 'index.html' compile $ makeItem ("Hello world" :: String) match "about/*" $ do compile $ do compiledIndex <- load (fromFilePath "index.html") -- load with an explicit identifier ...
Identifiers when using versions.
With version
the same file can be compiled into several items in the store.
A version name is needed to distinguish them:
-- e.g. file on disk: 'posts/hakyll.md' match "posts/*" $ do -- saved with implicit identifier ('posts/hakyll.md', no-version) compile pandocCompiler match "posts/*" $ version "raw" $ do -- saved with implicit identifier ('posts/hakyll.md', versionraw
) compile getResourceBody match "about/*" $ do compile $ do compiledPost <- load (fromFilePath "posts/hakyll.md") -- load no-version version rawPost <- load . setVersion (Just "raw") $ fromFilePath "posts/hakyll.md" -- load versionraw
...
Use setVersion
to set (or replace) the version of an identifier like fromFilePath "posts/hakyll.md"
.
Instances
IsString Identifier Source # | |
Defined in Hakyll.Core.Identifier fromString :: String -> Identifier # | |
Show Identifier Source # | |
Defined in Hakyll.Core.Identifier showsPrec :: Int -> Identifier -> ShowS # show :: Identifier -> String # showList :: [Identifier] -> ShowS # | |
Binary Identifier Source # | |
Defined in Hakyll.Core.Identifier | |
NFData Identifier Source # | |
Defined in Hakyll.Core.Identifier rnf :: Identifier -> () # | |
Eq Identifier Source # | |
Defined in Hakyll.Core.Identifier (==) :: Identifier -> Identifier -> Bool # (/=) :: Identifier -> Identifier -> Bool # | |
Ord Identifier Source # | |
Defined in Hakyll.Core.Identifier compare :: Identifier -> Identifier -> Ordering # (<) :: Identifier -> Identifier -> Bool # (<=) :: Identifier -> Identifier -> Bool # (>) :: Identifier -> Identifier -> Bool # (>=) :: Identifier -> Identifier -> Bool # max :: Identifier -> Identifier -> Identifier # min :: Identifier -> Identifier -> Identifier # |
fromFilePath :: FilePath -> Identifier Source #
Parse an identifier from a file path string. For example,
-- e.g. file on disk: 'posts/hakyll.md' match "posts/*" $ do -- saved with implicit identifier 'posts/hakyll.md' compile pandocCompiler match "about/*" $ do compile $ do compiledPost <- load (fromFilePath "posts/hakyll.md") -- load with explicit identifier ...
toFilePath :: Identifier -> FilePath Source #
Convert an identifier back to a relative FilePath
.
setVersion :: Maybe String -> Identifier -> Identifier Source #
Set or override the version of an identifier in order to specify which version of an Item
to load
from the Store
. For example,
match "posts/*" $ version "raw" $ do -- saved with implicit identifier ('posts/hakyll.md', versionraw
) compile getResourceBody match "about/*" $ do compile $ do rawPost <- load . setVersion (Just "raw") $ fromFilePath "posts/hakyll.md" -- load versionraw
...