submark-0.1.0: test/Text/CommonMark/QQ.hs
{-# LANGUAGE TemplateHaskell #-}
module Text.CommonMark.QQ (doc, node, nodes) where
import CMark
import Data.Text hiding (head)
import qualified Language.Haskell.TH as TH
import Language.Haskell.TH.Quote
doc :: QuasiQuoter
doc = QuasiQuoter
docQ
(error "Cannot use [doc|...|] as a pattern")
(error "Cannot use [doc|...|] as a type")
(error "Cannot use [doc|...|] as a dec")
nodes :: QuasiQuoter
nodes = QuasiQuoter
nodesQ
(error "Cannot use [nodes|...|] as a pattern")
(error "Cannot use [nodes|...|] as a type")
(error "Cannot use [nodes|...|] as a dec")
node :: QuasiQuoter
node = QuasiQuoter
nodeQ
(error "Cannot use [node|...|] as a pattern")
(error "Cannot use [node|...|] as a type")
(error "Cannot use [node|...|] as a dec")
parse :: String -> Node
parse = dropPosInfo . commonmarkToNode [optNormalize] . pack
dropPosInfo :: Node -> Node
dropPosInfo (Node _ nodeType children) =
Node Nothing nodeType $ fmap dropPosInfo children
docQ :: String -> TH.ExpQ
docQ text = [e|parse text|]
nodesQ :: String -> TH.ExpQ
nodesQ text = [e|let (Node _ _ ns) = parse text in ns|]
nodeQ :: String -> TH.ExpQ
nodeQ text = [e|let (Node _ _ ns) = parse text in head ns|]