module Data.Zettel where import qualified Data.Text as T import qualified Data.Text.IO as T import System.Directory (listDirectory) import Data.Path import Data.ZettelID import Data.ZettelPath import Data.Pointed (Pointed, point) import Text.Pandoc zettels :: (Monoid (f (Maybe ZettelID)), Pointed f) => ZettelRoot -> IO (f (Maybe ZettelID)) zettels (ZettelRoot r) = do paths <- listDirectory (toPosixPath r) let files = map (\p -> r ./ file (T.pack p)) paths pure $ foldMap (point . fromPath) files readZettel :: ZettelRoot -> ZettelID -> IO (Either PandocError Pandoc) readZettel (ZettelRoot base) zid = do contents <- T.readFile (toPosixPath (base ./ toPath zid)) runIO (readMarkdown def contents)