packages feed

compdoc 0.2.0.0 → 0.3.0.0

raw patch · 3 files changed

+81/−58 lines, 3 filesdep ~composite-aesondep ~composite-basePVP ok

version bump matches the API change (PVP)

Dependency ranges changed: composite-aeson, composite-base

API changes (from Hackage documentation)

- Text.Compdoc: type Compdoc a = FContent : a
+ Text.Compdoc: Compdoc :: Record (FContent : a) -> Compdoc a
+ Text.Compdoc: [unCompdoc] :: Compdoc a -> Record (FContent : a)
+ Text.Compdoc: newtype Compdoc a
- Text.Compdoc: fContent :: forall f_aiOb rs_aiOc. (Functor f_aiOb, (∈) FContent rs_aiOc) => (Text -> f_aiOb Text) -> Record rs_aiOc -> f_aiOb (Record rs_aiOc)
+ Text.Compdoc: fContent :: forall f_aiKp rs_aiKq. (Functor f_aiKp, (∈) FContent rs_aiKq) => (Text -> f_aiKp Text) -> Record rs_aiKq -> f_aiKp (Record rs_aiKq)
- Text.Compdoc: pandocToCompdoc :: (Typeable e, Show e, MonadThrow m) => (WriterOptions -> Pandoc -> PandocPure Text) -> WriterOptions -> JsonFormat e (Record a) -> Pandoc -> m (Record (Compdoc a))
+ Text.Compdoc: pandocToCompdoc :: (Typeable e, Show e, MonadThrow m) => (WriterOptions -> Pandoc -> PandocPure Text) -> WriterOptions -> JsonFormat e (Record a) -> Pandoc -> m (Compdoc a)
- Text.Compdoc: readMarkdown' :: (Show e, Typeable e, MonadThrow m) => ReaderOptions -> WriterOptions -> JsonFormat e (Record a) -> Text -> m (Record (Compdoc a))
+ Text.Compdoc: readMarkdown' :: (Show e, Typeable e, MonadThrow m) => ReaderOptions -> WriterOptions -> JsonFormat e (Record a) -> Text -> m (Compdoc a)
- Text.Compdoc: readMarkdownFile :: (MonadIO m, MonadThrow m, Show e, Typeable e) => ReaderOptions -> WriterOptions -> JsonFormat e (Record a) -> Path b File -> m (Record (Compdoc a))
+ Text.Compdoc: readMarkdownFile :: (MonadIO m, MonadThrow m, Show e, Typeable e) => ReaderOptions -> WriterOptions -> JsonFormat e (Record a) -> Path b File -> m (Compdoc a)

Files

ChangeLog.md view
@@ -1,5 +1,9 @@ # Changelog for compdoc +## v0.3.0.0++* `Compdoc` is now a newtype.+ ## v0.2.0.0  * Removed type family from compdoc definition.
compdoc.cabal view
@@ -1,11 +1,11 @@ cabal-version: 1.12 --- This file has been generated from package.yaml by hpack version 0.34.2.+-- This file has been generated from package.yaml by hpack version 0.34.4. -- -- see: https://github.com/sol/hpack  name:           compdoc-version:        0.2.0.0+version:        0.3.0.0 synopsis:       Parse a Pandoc to a composite value. description:    Provides a functionality for transforming a Pandoc into a vinyl/composite record. category:       Text
src/Text/Compdoc.hs view
@@ -1,90 +1,109 @@-{- |-   Module     : Text.Compdoc-   License    : MIT-   Stability  : experimental--Provides functionality for transforming a `Pandoc` into a composite record.--}-{-# LANGUAGE DataKinds         #-}-{-# LANGUAGE FlexibleContexts  #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TypeApplications #-}+{-# LANGUAGE TypeOperators #-} {-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE TemplateHaskell   #-}-{-# LANGUAGE TypeApplications  #-}-{-# LANGUAGE TypeOperators     #-}-module Text.Compdoc (-  FContent-, fContent-, Compdoc-, readMarkdown'-, readMarkdownFile-, runPandocPureDefault-, pandocToCompdoc-, contentBlock-, writeBlocksDefault-, flattenMeta-) where -import           Composite.Aeson-import           Composite.Aeson.Throw-import           Composite.Record-import           Composite.TH-import           Data.Aeson-import           Data.Vinyl ((<+>))-import           Path-import           RIO-import           Text.Pandoc-import           Text.Pandoc.Readers-import           Text.Pandoc.Throw+-- |+--   Module     : Text.Compdoc+--   License    : MIT+--   Stability  : experimental+--+-- Provides functionality for transforming a `Pandoc` into a composite record.+module Text.Compdoc+  ( FContent,+    fContent,+    Compdoc (..),+    readMarkdown',+    readMarkdownFile,+    runPandocPureDefault,+    pandocToCompdoc,+    contentBlock,+    writeBlocksDefault,+    flattenMeta,+  )+where -withLensesAndProxies [d|-  type FContent = "content" :-> Text-  |]+import Composite.Aeson+import Composite.Aeson.Throw+import Composite.Record+import Composite.TH+import Data.Aeson+import Data.Vinyl ((<+>))+import Path+import RIO+import Text.Pandoc+import Text.Pandoc.Readers+import Text.Pandoc.Throw +withLensesAndProxies+  [d|+    type FContent = "content" :-> Text+    |]+ -- | A Compdoc is a Record with at least an FContent field.-type Compdoc a = FContent ': a+--+-- @since 0.3.0.0+newtype Compdoc a = Compdoc {unCompdoc :: Record (FContent ': a)}  -- | Write a list of `Block`s to `Text` using `WriterOptions` defaulting to the empty string -- in the case of error.+--+-- @since 0.1.0.0 writeBlocksDefault :: WriterOptions -> [Block] -> Text writeBlocksDefault wopts x = runPandocPureDefault "" (writeHtml5String wopts $ Pandoc mempty x)  -- | Run a `PandocPure` operation with a default value in the event of failure.+--+-- @since 0.1.0.0 runPandocPureDefault :: a -> PandocPure a -> a runPandocPureDefault x = either (const x) id . runPure  -- | Read a markdown file from disk, supplying a `JsonFormat` for the metadata.-readMarkdownFile :: (MonadIO m, MonadThrow m, Show e, Typeable e)-                 => ReaderOptions-                 -> WriterOptions-                 -> JsonFormat e (Record a)-                 -> Path b File-                 -> m (Record (Compdoc a))+--+-- @since 0.1.0.0+readMarkdownFile ::+  (MonadIO m, MonadThrow m, Show e, Typeable e) =>+  ReaderOptions ->+  WriterOptions ->+  JsonFormat e (Record a) ->+  Path b File ->+  m (Compdoc a) readMarkdownFile ropts wopts f srcPath =   readFileUtf8 (toFilePath srcPath) >>= readMarkdown' ropts wopts f  -- | Read some `Pandoc` markdown as `Text` as a `Record (Compdoc a)` supplying a `JsonFormat` for the metadata.-readMarkdown' :: (Show e, Typeable e, MonadThrow m) => ReaderOptions -> WriterOptions -> JsonFormat e (Record a) -> Text -> m (Record (Compdoc a))+--+-- @since 0.1.0.0+readMarkdown' :: (Show e, Typeable e, MonadThrow m) => ReaderOptions -> WriterOptions -> JsonFormat e (Record a) -> Text -> m (Compdoc a) readMarkdown' ropts wopts f x = runPandocPureThrow (Text.Pandoc.Readers.readMarkdown ropts x) >>= pandocToCompdoc writeHtml5String wopts f  -- | Transform a `Pandoc` to a `Compdoc` supplying a `JsonFormat for the metadata.-pandocToCompdoc :: (Typeable e, Show e, MonadThrow m) => (WriterOptions -> Pandoc -> PandocPure Text) -> WriterOptions -> JsonFormat e (Record a) -> Pandoc -> m (Record (Compdoc a))+--+-- @since 0.1.0.0+pandocToCompdoc :: (Typeable e, Show e, MonadThrow m) => (WriterOptions -> Pandoc -> PandocPure Text) -> WriterOptions -> JsonFormat e (Record a) -> Pandoc -> m (Compdoc a) pandocToCompdoc writer wopts f (Pandoc meta xs) = do   k <- flattenMeta (writer wopts) meta >>= parseValue' f-  return $ contentBlock wopts xs <+> k+  return $ Compdoc $ contentBlock wopts xs <+> k  -- | Create the tail of a `Compdoc` which is just an `FContent` field.+--+-- @since 0.1.0.0 contentBlock :: WriterOptions -> [Block] -> Record (FContent : '[]) contentBlock wopts x = writeBlocksDefault wopts x :*: RNil  -- | Flatten pandoc metadata to an aeson value.+--+-- @since 0.1.0.0 flattenMeta :: MonadThrow m => (Pandoc -> PandocPure Text) -> Meta -> m Value flattenMeta writer (Meta meta) = toJSON <$> traverse go meta- where-  go :: MonadThrow m => MetaValue -> m Value-  go (MetaMap     m) = toJSON <$> traverse go m-  go (MetaList    m) = toJSONList <$> traverse go m-  go (MetaBool    m) = pure $ toJSON m-  go (MetaString  m) = pure $ toJSON m-  go (MetaInlines m) = toJSON <$> (runPandocPureThrow . writer . Pandoc mempty . (:[]) . Plain $ m)-  go (MetaBlocks  m) = toJSON <$> (runPandocPureThrow . writer . Pandoc mempty $ m)+  where+    go :: MonadThrow m => MetaValue -> m Value+    go (MetaMap m) = toJSON <$> traverse go m+    go (MetaList m) = toJSONList <$> traverse go m+    go (MetaBool m) = pure $ toJSON m+    go (MetaString m) = pure $ toJSON m+    go (MetaInlines m) = toJSON <$> (runPandocPureThrow . writer . Pandoc mempty . (: []) . Plain $ m)+    go (MetaBlocks m) = toJSON <$> (runPandocPureThrow . writer . Pandoc mempty $ m)