-- | An identifier is a type used to uniquely identify a resource, target...---- One can think of an identifier as something similar to a file path. An-- identifier is a path as well, with the different elements in the path-- separated by @/@ characters. Examples of identifiers are:---- * @posts/foo.markdown@---- * @index@---- * @error/404@---- The most important difference between an 'Identifier' and a file path is that-- the identifier for an item is not necesserily the file path.---- For example, we could have an @index@ identifier, generated by Hakyll. The-- actual file path would be @index.html@, but we identify it using @index@.---- @posts/foo.markdown@ could be an identifier of an item that is rendered to-- @posts/foo.html@. In this case, the identifier is the name of the source-- file of the page.--{-# LANGUAGE GeneralizedNewtypeDeriving #-}moduleHakyll.Core.Identifier(Identifier(..),parseIdentifier,toFilePath)whereimportControl.Arrow(second)importData.Monoid(Monoid)importGHC.Exts(IsString,fromString)importSystem.FilePath(joinPath)-- | An identifier used to uniquely identify a value--newtypeIdentifier=Identifier{unIdentifier::[String]}deriving(Eq,Ord,Monoid)instanceShowIdentifierwhereshow=toFilePathinstanceIsStringIdentifierwherefromString=parseIdentifier-- | Parse an identifier from a string--parseIdentifier::String->IdentifierparseIdentifier=Identifier.filter(not.null).split'wheresplit'[]=[[]]split'str=let(pre,post)=second(drop1)$break(=='/')strinpre:split'post-- | Convert an identifier to a relative 'FilePath'--toFilePath::Identifier->FilePathtoFilePath=joinPath.unIdentifier