shikensu haskell
v0.4.1
シーケンス
Sequence
Run a sequence of functions on in-memory representations of files.
Build static websites with ease, without conforming to a specific structure.
import Shikensu
import Shikensu.Contrib (clone, copyPropsToMetadata, permalink, renameExt, renderContent)
import Shikensu.Contrib.IO (read, write)
import Data.ByteString (ByteString)
import Flow
import Prelude hiding (read)
import qualified Data.Text.Encoding as Text (decodeUtf8, encodeUtf8)
main :: IO Dictionary
main =
-- This IO operation will read the files matching the glob pattern `src/**/*.md`,
-- transform them (see the `flow` function) and then write them to the `build` directory.
dictionary_io
dictionary_io :: IO Dictionary
dictionary_io =
Shikensu.listRelative ["src/**/*.md"] "./"
>>= read
>>= flow
>>= write "./build"
flow :: Dictionary -> IO Dictionary
flow =
renameExt ".md" ".html"
.> permalink "index"
.> clone "index.html" "200.html"
.> copyPropsToMetadata
.> renderContent markdownRenderer
.> return
markdownRenderer :: Definition -> Maybe ByteString
markdownRenderer def =
content def
|> fmap Text.decodeUtf8
|> fmap Markdown.render
|> fmap Text.encodeUtf8
This lists all the markdown files in the ./src
directory
and then does the following in this exact order:
.html
.%matched_path/%file_basename/index.%file_extension
.index.html
path.content
property of each definition
(in this case we are rendering markdown)../build
directory.Because this allows me to easily define a workflow for building a static website, and more specifically: