úΪ     NoneE 8Preprocessors are comprised of an input file extension (), an output file extension (!), and a transforming function ( ->  )Extract a preprocessorNewtype wrapper for  s that represent file extensionsExtract extensionConstructor for a preprocessor.$Run the preprocessor on a given fileFRead in the input file, run through the preprocessor, and write it outLazily read in a file as  if the file exists Replace the file extension of a  with a given extension'Run a preprocessor on incoming requests~For example, if your preprocessor has input extension ".fay" and output extension ".js" (and just does the identity function) /ppMiddleware (preprocessor ".fay" ".js" (Just))Aand a request to "index.js" goes through the generated middleware GET "/index.js"%If "index.js" exists, it does nothing4If "index.js" does not exist, it does the following:wIf "index.fay" exists, it will read it in, run the function on its content, and it will write the output to "index.js"Otherwise, it will do nothing5Finally, in all cases, it will pass the request along-Preprocessor composed with static file serverÉThis function is just the composition of staticPolicy from wai-middleware-static and ppMiddleware. The policy creation functions from that library are also exported from this library for ease of use.Split a  into period-delimited sectionsinput extensionoutput extensiontransforming function preprocessor           !"#$%&'(!)#wai-middleware-preprocessor-0.2.0.0#Network.Wai.Middleware.Preprocessorwai-middleware-static-0.6.0.1Network.Wai.Middleware.Staticonly isNotAbsolutenoDotscontains hasPrefix hasSuffixaddSlashaddBase<|>>-> predicatepolicy tryPolicyPolicy Preprocessor preprocessorrunPreprocessor preprocess ppMiddlewareppFileMiddlewarebaseGHC.BaseString text-1.2.0.4Data.Text.InternalText Data.MaybeMayberunPP ExtensionfromExt maybeRead replaceExtGHC.IOFilePath extensionsPP