śĪUćEÜø           ! " # $ % & ' ( ) * + , - . / 0 123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œ ž Ÿ   ” ¢£¤„¦§Ø©Ŗ « ¬!­!®!Æ!°!±!²!³!“!µ"¶#·#,$ (Type used to represent a directed graph ø¹ŗA node in the directed graph »¼Tag identifying the node ½Edges starting at this node ¾-Append two nodes. Useful for joining graphs. æ,Allow users to concatenate different graphs ø¹ŗ»¼½ø¹ø¹ŗ»¼½»¼½ Construction of directed graphs %List of (node, reachable neighbours) Resulting directed graph (Check if a node lies in the given graph Node to check for Directed graph to check in If the node lies in the graph Get all nodes in the graph Graph to get the nodes from All nodes in the graph 8Get a set of reachable neighbours from a directed graph Node to get the neighbours of Graph to search in Set containing the neighbours /Reverse a directed graph (i.e. flip all edges) IFind all reachable nodes from a given set of nodes in the directed graph @Remove all dangling pointers, i.e. references to notes that do " not actually exist in the graph. DSolve a dependency graph. This function returns an order to run the  different nodes Graph Resulting plan Ą'Produce a reversed order using a stack Temporary result Backtrace stack Items in the stack Graph Ordered result  @Convert a directed graph into dot format for debugging purposes Convert nodes to dot names Graph to dump Resulting string Write out the .dot file to a given file path. See   for more  information.     $Logger structure. Very complicated. ĮĀĆ Create a new logger (Flush the logger (blocks until flushed) Ä!Send a raw message to the logger Start a section in the log Logger  Section name  No result .Execute a monadic action and log the duration Logger Message Action Timed and logged action #Log something at the same level as , but without the timing Logger Message  No result    % ÅĘĒČÉŹĖĢĶĪÅŹĖĢĶĪÅŹĖĢĶĪ>Trim a string (drop spaces, tabs and newlines at both sides). 1A simple (but inefficient) regex replace funcion Pattern  Replacement (called on capture) Source string Result HA simple regex split function. The resulting list will contain no empty  strings. Pattern String to split Result 9Convert a filepath to an URL starting from the site root  Example:   toUrl "foo/bar.html" Result:  "/foo/bar.html" BGet the relative url to the site root, for a given (absolute) url Ļ<The first file in the list that actually exists is returned ŠServe a given directory Directory to serve Pre-serve hook 9Main method, runs a static server in the given directory Directory to serve Pre-serve hook Port to listen on Blocks forever 0Describes an item that can be saved to the disk #Save an item to the given filepath &ŃElements of a template. ŅÓŌ*Datatype used for template substitutions. ÕÖŃŅÓŌÕÖŃŌÓŅŅÓŌÕÖÕÖ' Construct a Template from a string. (2Read a hamlet template using the default settings 4Read a hamlet template using the specified settings × Convert a ŲŁ to a  Hamlet runtime template Hakyll template  )Type used to represent pages  !'Create a metadata page, without a body "8Convert a page to a map. The body will be placed in the body key.  !"  !" #GGet a metadata field. If the field does not exist, the empty string is  returned. Key Page Value $Get a field in a Ś wrapper Key Page Value, if found %JAdd a metadata field. If the field already exists, it is not overwritten. Key Value Page to add it to Resulting page &Arrow-based variant of %. Because of it's type, this function is ) very usable together with the different require functions. Key  Value arrow Resulting arrow 'KDo something with a metadata value, but keep the old value as well. If the N key given is not present in the metadata, nothing will happen. If the source N and destination keys are the same, the value will be changed (but you should  use ( for this purpose). (Key of which the value should be copied "Key the value should be copied to Function to apply on the value %Page on which this should be applied Resulting page (Change a metadata value.   import Data.Char (toUpper) # changeField "title" (map toUpper) !Will put the title in UPPERCASE. Key to change.  Function to apply on the value. Page to change Resulting page )JMake a copy of a metadata field (put the value belonging to a certain key  under some other key as well)  Key to copy Destination to copy to %Page on which this should be applied Resulting page *%When the metadata has a field called path in a  folder/yyyy-mm-dd-title.extension$ format (the convention for pages), $ this function can render the date.  . renderDate "date" "%B %e, %Y" "Date unknown" Will render something like January 32, 2010. 0Key in which the rendered date should be placed Format to use on the date 1Default value, in case the date cannot be parsed %Page on which this should be applied Resulting page +This is an extended version of * that allows you to F specify a time locale that is used for outputting the date. For more  details, see *. Output time locale Destination key Format to use on the date Default value  Target page Resulting page #$%&'()*+ #$%&'()*+ #$%&'()*+ ŪWe'(re using a simple state monad as parser Ü&Read the metadata section from a page Ż Read the body section of a page ŽRead an entire page ,Read a page from a string ,,, -Box type for a compiled item ./Box a value into a .- 0Unbox a value from a .- -./0-./0-../012312312312340An identifier used to uniquely identify a value 567"Parse an identifier from a string 8$Convert an identifier to a relative ß 456784567845656789)Type that allows matching on identifiers ąįāOne base element of a pattern ćäå:Parse a pattern from a string ;EMatch an identifier against a pattern, generating a list of captures <)Check if an identifier matches a pattern =KGiven a list of identifiers, retain only those who match the given pattern ęLSplit a list at every possible point, generate a list of (init, tail) cases ēInternal verion of ; >LCreate an identifier from a pattern by filling in the captures with a given  string  Example:  = fromCapture (parsePattern "tags/*") (parseIdentifier "foo") Result:  "tags/foo" ?Simplified version of > which takes a č instead of an  54  1 fromCaptureString (parsePattern "tags/*") "foo" Result:  "tags/foo" @HCreate an identifier from a pattern by filling in the captures with the  given list of strings 9:;<=>?@9:;<=>?@9:;<=>?@AType used for a route éźBApply a route to an identifier CKA route that uses the identifier as filepath. For example, the target with  ID foo/bar will be written to the file foo/bar. D+Set (or replace) the extension of a route.  Example:  * runRoute (setExtension "html") "foo/bar" Result:   Just "foo/bar.html"  Example:  E runRoute (setExtension "html") "posts/the-art-of-trolling.markdown" Result: ' Just "posts/the-art-of-trolling.html" EDModify a route: apply the route if the identifier matches the given  pattern, fail otherwise. F>Create a custom route. This should almost always be used with E. ABCDEFABCDEFABCDEFGHI&Directory in which the output written JDirectory where hakyll's internal store is kept K$Function to determine ignored files In L#, the following files are ignored:  files starting with a .  files ending with a ~  files ending with .swp L/Default configuration for a hakyll application GHIJKLGHIJKLGHIJKHIJKLM@Given a path to a file, try to make the path writable by making  all directories on the path. NIGet all contents of a directory. Note that files starting with a dot (.)  will be ignored. Include directories? Directory to search List of files found ėKCheck if a timestamp is obsolete compared to the timestamps of a number of 6 files. When they are no files, it is never obsolete. The time to check. !Dependencies of the cached file. O%Check if a file is obsolete, given it'#s dependencies. When the file does J not exist, it is always obsolete. Other wise, it is obsolete if any of it's A dependencies has a more recent modification time than the file. The cached file  Dependencies of the cached file PKCheck if a file is meant for Hakyll internal use, i.e. if it is located in $ the destination or store directory Configuration File to check If the given file is internal MNOPMNOPMNOP Q"Data structure used for the store ģķ'All items are stored on the filesystem ī'And some items are also kept in-memory RInitialize the store ļ"Auxiliary: add an item to the map šCreate a path SStore an item T Load an item QRSTQRSTQRST U9A value responsible for retrieving and listing resources VW9A list of all resources this provider is able to provide X&Retrieve a certain resource as string Y/Retrieve a certain resource as lazy bytestring Z A resource EInvariant: the resource specified by the given identifier must exist [\]+Check if a given identifier has a resource ^'Retrieve a digest for a given resource _!Check if a resource was modified UVWXYZ[\]^_ Z[\UVWXY]^_ UVWXYVWXYZ[\[\]^_*`The compiler arrow ńņóōThe compiler monad õö÷%Environment in which a compiler runs ųłTarget identifier śResource provider ū Site routes üCompiler store ż8Flag indicating if the underlying resource was modified žLogger ’2Environment in which the dependency analyzer runs Target identifier Resource provider A set of dependencies 4Run a compiler, yielding the resulting target and it's dependencies Compiler to run Target identifier Resource provider Route Store Was the resource modified? Logger aFWait until another compiler has finished before running this compiler `ńņóōõö÷ųłśūüżž’a`ńņóńņóōõöõö÷ųłśūüżžųłśūüżž’a+bCSimplification of the RulesM type; usually, it will not return any  result. c The monad used to compose rules    Rule state    2A collection of rules for the compilation process )Routes used in the compilation structure Compilation rules A list of the used resources Output of a compiler rule H The compiler will produce a simple item. This is the most common case. J The compiler will produce more compilers. These new compilers need to be O added to the runtime if possible, since other items might depend upon them. "Run a Rules monad, resulting in a   bc     bc         Add a route Add a number of compilers Add resources d%Add a compilation rule to the rules. MThis instructs all resources matching the given pattern to be compiled using M the given compiler. When no resources match the given pattern, nothing will 8 happen. In this case, you might want to have a look at e. eAdd a compilation rule LThis sets a compiler for the given identifier. No resource is needed, since O we are creating the item from scratch. This is useful if you want to create a J page on your site that just takes content from other items -- but has no  actual content itself. f Add a route. <This adds a route for all items matching the given pattern. gIApart from regular compilers, one is also able to specify metacompilers. J Metacompilers are a special class of compilers: they are compilers which  produce other compilers. NThis is needed when the list of compilers depends on something we cannot know L before actually running other compilers. The most typical example is if we  have a blogpost using tags. 2Every post has a collection of tags. For example,   post1: code, haskell  post2: code, random KNow, we want to create a list of posts for every tag. We cannot write this  down in our b DSL directly, since we don't know what tags the different N posts will have -- we depend on information that will only be available when & we are actually compiling the pages. The solution is simple, using g", we can add a compiler that will O parse the pages and produce the compilers needed for the different tag pages. 2And indeed, we can see that the first argument to g is a  ` which produces a list of (54, ` ) pairs. The  idea is simple: g' produces a list of compilers, and the  corresponding identifiers. EFor simple hakyll systems, it is no need for this construction. More N formally, it is only needed when the content of one or more items determines  which items must be rendered. (Compiler generating the other compilers Resulting rules h Version of g4 that allows you to specify a custom identifier for  the metacompiler. Identifier for this compiler (Compiler generating the other compilers Resulting rules bcdefghcbdefghdefghi8A preview thread that periodically recompiles the site. Configuration Resources to watch %Action called when something changes Can block forever iiijCreate a filesystem-based VU jjjk4Run a compiler, yielding the resulting target and it's dependencies. This  version of  also stores the result Compiler to run Target identifier Resource provider Route Store Was the resource modified? Logger Resulting item l@Get the identifier of the item that is currently being compiled m)Get the route we are using for this item n#Get the route for a specified item o.Get the resource we are compiling as a string Auxiliary: get a dependency p Variant of q which drops the current value qJRequire another target. Using this function ensures automatic handling of  dependencies rArrow-based variant of q s Variant of t which drops the current value tLRequire a number of targets. Using this function ensures automatic handling  of dependencies uArrow-based variant of t vw0Create an unsafe compiler from a function in IO Function to lift Resulting compiler x Compiler for debugging purposes yMap over a compiler zLog and time a compiler Message Compiler to time Resulting compiler {Choose a compiler by extension  Example:  & route "css/*" $ setExtension "css" ; compile "css/*" $ byExtension (error "Not a (S)CSS file") & [ (".css", compressCssCompiler)  , (".scss", sass)  ] #This piece of code will select the compressCssCompiler for .css files,  and the sass" compiler (defined elsewhere) for .scss files. Default compiler Choices Resulting compiler `aklmnopqrstuvwxyz{`klmnoapqrstuvwxyz{klmnopqrstuvwxyz{|Newtype construct around ß# which will copy the file directly }~|}~|}~|}~}~€=Use a unix filter as compiler. For example, we could use the rev program  as a compiler.  ! rev :: Compiler Resource String 1 rev = getResourceString >>> unixFilter "rev" [] JA more realistic example: one can use this to call, for example, the sass G compiler on CSS files. More information about sass can be found here:  http://sass-lang.com/ 6The code is fairly straightforward, given that we use .scss for sass: + route "style.scss" $ setExtension "css"  compile "style.scss" $ > getResourceString >>> unixFilter "sass" ["-s", "--scss"] + >>> arr compressCss  Program name  Program args Resulting compiler Internally used function €€€Compiler form of ‚ ‚$Compress CSS to speed up your site. (Compresses certain forms of separators. Compresses all whitespace. (Function that strips CSS comments away. ‚‚‚ ƒGDatatype to represent the different file types Hakyll can deal with by  default „…†‡ˆ‰Š‹ŒKGet the file type for a certain file. The type is determined by extension. 'Get the file type for the current file ƒ„…†‡ˆ‰Š‹Œ ƒ‹Š‰ˆ‡†…„Œ ƒ‹Š‰ˆ‡†…„„…†‡ˆ‰Š‹Œ Ž5Read a string using pandoc, with the default options *File type, determines how parsing happens String to read Resulting document 6Read a string using pandoc, with the supplied options Parser options *File type, determines how parsing happens String to read Resulting document BWrite a document (as HTML) using pandoc, with the default options Document to write Resulting HTML ‘CWrite a document (as HTML) using pandoc, with the supplied options Writer options for pandoc Document to write Resulting HTML ’Read the resource using pandoc “Read the resource using pandoc ”!Render the resource using pandoc •!Render the resource using pandoc –8The default reader options for pandoc parsing in hakyll —:The default writer options for pandoc rendering in hakyll Ž‘’“”•–— Ž‘’“”•–— Ž‘’“”•–—˜ Substitutes  $identifiers in the given Template by values from the given  Page@. When a key is not found, it is left as it is. You can specify 1 the characters used to replace escaped dollars ($$) here. ™Apply a page as it'5s own template. This is often very useful to fill in  certain keys like $root and $url. š0Read a template. If the extension of the file we're compiling is  .hml or .hamlet9, it will be considered as a Hamlet template, and parsed  as such. › Version of š that enables custom settings. œ Template  Compiler ˜™š›œ˜™š›œ˜™š›œ ,Create a page from a body, without metadata žRead a page (do not render it) ŸKRead a page, add default fields, substitute fields and render using pandoc  IAdd a number of default metadata fields to a page. These fields include:  $url  $category $title $path”FSort posts based on the basename of the post. This is equivalent to a $ chronologival sort, because of the year-month-day-title.extension naming  convention in Hakyll.  !"žŸ ”  !"žŸ ”žŸ ” ¢>This is a data structure to keep the configuration of a feed. £¤Title of the feed. „Description of the feed. ¦Name of the feed author. §)Absolute root URL of the feed site (e.g. http: jaspervdj.be) LThis is an auxiliary function to create a listing that is, in fact, a feed. ) The items should be sorted on date. The  $timestamp field should be set. Feed template Item template URL of the feed Feed configuration Items to include Resulting feed &Abstract function to render any feed. Feed template Item template Feed configuration Feed compiler Ø+Render an RSS feed with a number of items. Feed configuration Feed compiler ©,Render an Atom feed with a number of items. Feed configuration Feed compiler ¢£¤„¦§Ø©¢£¤„¦§Ø©¢£¤„¦§£¤„¦§Ø© ŖCompiler form of  compressCss* which automatically picks the right root  path «Relativize URL' s in HTML Path to the site root HTML to relativize Resulting HTML  Relativize URL's in attributes Path to the site root Attribute to relativize Resulting attribute Ŗ«Ŗ«Ŗ«! ¬Data about tags ­®!Obtain tags from a page "Obtain categories from a page Æ#Higher-level function to read tags %Function extracting tags from a page Pages Resulting tags °Read a tagmap using the tags metadata field ±Read a tagmap using the category metadata field ²Render a tag cloud in HTML Produce a link for a tag Smallest font size, in percent Biggest font size, in percent Tag cloud renderer #Render tags with links Function to get the tags Destination key Create a link for a tag Resulting compiler ³Render tags with links Destination key Create a link for a tag Resulting compiler “Render the category in a link Destination key Create a category link Resulting compiler ¬­®Æ°±²³“ ¬­®Æ°±²³“ ¬­®­®Æ°±²³“"$%&'()*+,-./01µ/Run all rules needed, return the rule set used 2%Return a set of modified identifiers Resource provider Store Identifiers to check Modified resources 3=Add a number of compilers and continue using these compilers "Remaining compilers yet to be run Compilers to add 4Ordered list of compilers  No result µµµ#¶IThis usualy is the function with which the user runs the hakyll compiler · A variant of ¶+ which allows the user to specify a custom  configuration 5Build the site 6Remove the output directories 7Show usage information. 8Preview the site 9Rebuild the site :Start a server ¶·¶·¶·,˜ !"#$%&'()*+,123456789:;<=>?@ABCDEFGHIJKLMNOPUVWXYZ[\]^_`abcdefghklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ”¢£¤„¦§Ø©Ŗ«¬­®Æ°±²³“¶·;$-./0123456789:;<=>?@ABCDE&F'G(H(I)J)J)K)L)M)N O P Q R S T U V W X Y Y Z [\]^__`abcdefghijklmnopqqrstuvwxyz{|}~~€‚‚ƒ„…†*‡*ˆ+‰+Š‹ŒŽ‘’“”•–—˜™š›œžŸ ”¢££¤„¦§Ø©Ŗ«¬­®Æ°±²³“µ¶·ø¹ŗ»¼½¾æĄĮĀ Ć Ä Å Ę ĒČČÉŹĖĢĶĪ Ļ Š!Ń!Ń!Ņ!Ó!Ō!Õ!Ö!×!Ų"Ł#Ś#Ū$-$Ü$Ż$Ż$Ž$ß$ą$įā8ćäå%ę%ē%č%é%ź%ė%ģ%ķ%ī%ļšń&ņ&ó&ō&õ&F&ö(÷ųłśųłśūüż ž ’  ūc  ū  k zs*‡****************** *!*"*#*$+Š+%+&+&+'+(+(+)+*+++,+-+,+./012345678 9!:!;!<"="=">"?"?"@"A"B"B"C"D"E"F"G"H"I"J#K#L#M#N#O#PQhakyll-3.0.0.2Hakyll.Core.DirectedGraph*Hakyll.Core.DirectedGraph.DependencySolverHakyll.Core.DirectedGraph.DotHakyll.Core.LoggerHakyll.Web.Util.StringHakyll.Web.Preview.ServerHakyll.Core.WritableHakyll.Web.TemplateHakyll.Web.Template.ReadHakyll.Web.PageHakyll.Web.Page.MetadataHakyll.Web.Page.ReadHakyll.Core.CompiledItemHakyll.Core.Util.ArrowHakyll.Core.IdentifierHakyll.Core.Identifier.PatternHakyll.Core.RoutesHakyll.Core.ConfigurationHakyll.Core.Util.FileHakyll.Core.StoreHakyll.Core.ResourceProviderHakyll.Core.CompilerHakyll.Core.RulesHakyll.Web.Preview.Poll1Hakyll.Core.ResourceProvider.FileResourceProviderHakyll.Core.CopyFileHakyll.Core.UnixFilterHakyll.Web.CompressCssHakyll.Web.FileTypeHakyll.Web.PandocHakyll.Web.FeedHakyll.Web.RelativizeUrlsHakyll.Web.TagsHakyll.Core.Run Hakyll.Main"Hakyll.Core.DirectedGraph.Internal Paths_hakyllHakyll.Web.Template.InternalHakyll.Web.Template.Read.HakyllHakyll.Web.Template.Read.HamletHakyll.Web.Page.InternalHakyll.Core.Compiler.InternalHakyll.Core.Rules.InternalHakyll DirectedGraphfromListmembernodes neighboursreversereachableNodessanitizesolveDependenciestoDotwriteDotLogger makeLogger flushLoggersectiontimedreporttrim replaceAllsplitAlltoUrl toSiteRoot staticServerWritablewriteTemplate readTemplatereadHamletTemplatereadHamletTemplateWithPage pageMetadatapageBodyfromMaptoMapgetField getFieldMaybesetField setFieldA renderField changeField copyFieldrenderDateFieldrenderDateFieldWithreadPage CompiledItem compiledItemunCompiledItemconstA sequenceAunitA Identifier unIdentifierparseIdentifier toFilePathPattern parsePatternmatch doesMatchmatches fromCapturefromCaptureString fromCapturesRoutes runRoutesidRoute setExtensionifMatch customRouteHakyllConfigurationdestinationDirectorystoreDirectory ignoreFiledefaultHakyllConfigurationmakeDirectoriesgetRecursiveContentsisFileObsoleteisFileInternalStore makeStorestoreSetstoreGetResourceProvider resourceListresourceStringresourceLazyByteStringResource unResourceresourceExistsresourceDigestresourceModifiedCompilerfromDependencyRulesRulesMcompilecreateroute metaCompilemetaCompileWith previewPollfileResourceProvider runCompiler getIdentifiergetRoute getRouteForgetResourceStringrequire_requirerequireA requireAll_ requireAll requireAllAcachedunsafeCompilertraceShowCompiler mapCompiler timedCompiler byExtensionCopyFile unCopyFilecopyFileCompiler unixFiltercompressCssCompiler compressCssFileTypeBinaryCss PlainTextRstMarkdownLiterateHaskellLaTeXHtmlfileType getFileType readPandocreadPandocWith writePandocwritePandocWithpageReadPandocpageReadPandocWithpageRenderPandocpageRenderPandocWithdefaultHakyllParserStatedefaultHakyllWriterOptions applyTemplate applySelftemplateCompilertemplateCompilerWithapplyTemplateCompilerfromBodyreadPageCompiler pageCompileraddDefaultFieldssortByBaseNameFeedConfiguration feedTitlefeedDescriptionfeedAuthorNamefeedRoot renderRss renderAtomrelativizeUrlsCompilerrelativizeUrlsTagstagsMap readTagsWithreadTags readCategoryrenderTagCloudrenderTagsFieldrenderCategoryFieldrunhakyll hakyllWithunDirectedGraphNodenodeTagnodeNeighbours appendNodes$fMonoidDirectedGraphorder loggerChan loggerSyncmessageversionbindirlibdirdatadir libexecdir getBinDir getLibDir getDataDir getLibexecDirgetDataFileNamefindFilestaticTemplateElementEscapedKeyChunk unTemplate fromHamletRT hamlet-0.7.1Text.Hamlet.RTHamletRTbase Data.MaybeMaybe LineParser parseMetadata parseBody parsePageGHC.IOFilePath unPatternPatternComponentLiteral CaptureMany CaptureOnesplitsmatch'GHC.BaseStringunRoutes isObsoletestoreMapaddToMapmakePathcompilerDependencies compilerJob CompilerM unCompilerMCompilerEnvironmentcompilerIdentifiercompilerResourceProvidercompilerRoutes compilerStorecompilerResourceModifiedcompilerLoggerDependencyEnvironmentdependencyIdentifierdependencyResourceProvider DependenciesrunCompilerJobrunCompilerDependenciesfromJobfromDependenciesunRulesM RuleStaterulesMetaCompilerIndexRuleSet rulesRoutesrulesCompilersrulesResources CompileRuleMetaCompileRulerunRules tellRoute tellCompilers tellResources getDependency unixFilterIOcompressSeparatorscompressWhitespace stripComments createFeed renderFeedrelativizeUrlsAttrsgetTags getCategoryrenderTagsFieldWithRuntime unRuntime RuntimeStatehakyllModified hakyllGraphRuntimeEnvironment hakyllLoggerhakyllConfiguration hakyllRouteshakyllResourceProvider hakyllStoremodifiedaddNewCompilers runCompilersbuildcleanhelppreviewrebuildserver