module Ondim.Targets.LaTeX.Instances
( LaTeXNode (..)
, LaTeXDoc (..)
, escapeLaTeX
) where
import Data.Text qualified as T
import Data.Typeable (eqT, (:~:) (..))
import Ondim
import Ondim.Advanced
import Data.Bitraversable (bimapM)
expandLNodes :: forall s. [LaTeXNode] -> Ondim s [LaTeXNode]
expandLNodes :: forall s. [LaTeXNode] -> Ondim s [LaTeXNode]
expandLNodes = (LaTeXNode -> Ondim s [LaTeXNode] -> Ondim s [LaTeXNode])
-> Ondim s [LaTeXNode] -> [LaTeXNode] -> Ondim s [LaTeXNode]
forall a b. (a -> b -> b) -> b -> [a] -> b
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr LaTeXNode -> Ondim s [LaTeXNode] -> Ondim s [LaTeXNode]
forall {s}. LaTeXNode -> Ondim s [LaTeXNode] -> Ondim s [LaTeXNode]
go ([LaTeXNode] -> Ondim s [LaTeXNode]
forall a. a -> Ondim s a
forall (f :: * -> *) a. Applicative f => a -> f a
pure [LaTeXNode]
forall a. Monoid a => a
mempty)
where
go :: LaTeXNode -> Ondim s [LaTeXNode] -> Ondim s [LaTeXNode]
go i :: LaTeXNode
i@(Command Text
"sep" [LAttribute]
_ [LaTeXNode]
_) Ondim s [LaTeXNode]
x = (LaTeXNode
i LaTeXNode -> [LaTeXNode] -> [LaTeXNode]
forall a. a -> [a] -> [a]
:) ([LaTeXNode] -> [LaTeXNode])
-> Ondim s [LaTeXNode] -> Ondim s [LaTeXNode]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ondim s [LaTeXNode]
x
go LaTeXNode
i Ondim s [LaTeXNode]
x = ([LaTeXNode] -> [LaTeXNode] -> [LaTeXNode])
-> Ondim s [LaTeXNode]
-> Ondim s [LaTeXNode]
-> Ondim s [LaTeXNode]
forall a b c. (a -> b -> c) -> Ondim s a -> Ondim s b -> Ondim s c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 [LaTeXNode] -> [LaTeXNode] -> [LaTeXNode]
forall {t :: * -> *}.
Foldable t =>
t LaTeXNode -> [LaTeXNode] -> [LaTeXNode]
(++?) (LaTeXNode -> Ondim s [LaTeXNode]
forall t s. OndimNode t => t -> Ondim s [t]
expandNode LaTeXNode
i) Ondim s [LaTeXNode]
x
t LaTeXNode
xs ++? :: t LaTeXNode -> [LaTeXNode] -> [LaTeXNode]
++? [LaTeXNode]
ys = (LaTeXNode -> [LaTeXNode] -> [LaTeXNode])
-> [LaTeXNode] -> t LaTeXNode -> [LaTeXNode]
forall a b. (a -> b -> b) -> b -> t a -> b
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr LaTeXNode -> [LaTeXNode] -> [LaTeXNode]
cons [LaTeXNode]
ys t LaTeXNode
xs
cons :: LaTeXNode -> [LaTeXNode] -> [LaTeXNode]
cons (Command Text
"sep" [LAttribute]
_ [LaTeXNode]
_) (Command Text
"sep" [LAttribute]
_ [LaTeXNode]
_ : [LaTeXNode]
xs) = Text -> LaTeXNode
Text Text
"\n\n" LaTeXNode -> [LaTeXNode] -> [LaTeXNode]
forall a. a -> [a] -> [a]
: [LaTeXNode]
xs
cons LaTeXNode
x [LaTeXNode]
xs = LaTeXNode
x LaTeXNode -> [LaTeXNode] -> [LaTeXNode]
forall a. a -> [a] -> [a]
: [LaTeXNode]
xs
type LAttribute = ([LaTeXNode], [LaTeXNode])
instance Expansible LAttribute where
expandSubs :: forall s. LAttribute -> Ondim s LAttribute
expandSubs = ([LaTeXNode] -> Ondim s [LaTeXNode])
-> ([LaTeXNode] -> Ondim s [LaTeXNode])
-> LAttribute
-> Ondim s LAttribute
forall (t :: * -> * -> *) (f :: * -> *) a c b d.
(Bitraversable t, Applicative f) =>
(a -> f c) -> (b -> f d) -> t a b -> f (t c d)
bimapM [LaTeXNode] -> Ondim s [LaTeXNode]
forall s. [LaTeXNode] -> Ondim s [LaTeXNode]
expandLNodes [LaTeXNode] -> Ondim s [LaTeXNode]
forall s. [LaTeXNode] -> Ondim s [LaTeXNode]
expandLNodes
data LaTeXNode
= Command !Text ![LAttribute] ![LaTeXNode]
| Text !Text
| !Text
deriving (LaTeXNode -> LaTeXNode -> Bool
(LaTeXNode -> LaTeXNode -> Bool)
-> (LaTeXNode -> LaTeXNode -> Bool) -> Eq LaTeXNode
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: LaTeXNode -> LaTeXNode -> Bool
== :: LaTeXNode -> LaTeXNode -> Bool
$c/= :: LaTeXNode -> LaTeXNode -> Bool
/= :: LaTeXNode -> LaTeXNode -> Bool
Eq, Eq LaTeXNode
Eq LaTeXNode =>
(LaTeXNode -> LaTeXNode -> Ordering)
-> (LaTeXNode -> LaTeXNode -> Bool)
-> (LaTeXNode -> LaTeXNode -> Bool)
-> (LaTeXNode -> LaTeXNode -> Bool)
-> (LaTeXNode -> LaTeXNode -> Bool)
-> (LaTeXNode -> LaTeXNode -> LaTeXNode)
-> (LaTeXNode -> LaTeXNode -> LaTeXNode)
-> Ord LaTeXNode
LaTeXNode -> LaTeXNode -> Bool
LaTeXNode -> LaTeXNode -> Ordering
LaTeXNode -> LaTeXNode -> LaTeXNode
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: LaTeXNode -> LaTeXNode -> Ordering
compare :: LaTeXNode -> LaTeXNode -> Ordering
$c< :: LaTeXNode -> LaTeXNode -> Bool
< :: LaTeXNode -> LaTeXNode -> Bool
$c<= :: LaTeXNode -> LaTeXNode -> Bool
<= :: LaTeXNode -> LaTeXNode -> Bool
$c> :: LaTeXNode -> LaTeXNode -> Bool
> :: LaTeXNode -> LaTeXNode -> Bool
$c>= :: LaTeXNode -> LaTeXNode -> Bool
>= :: LaTeXNode -> LaTeXNode -> Bool
$cmax :: LaTeXNode -> LaTeXNode -> LaTeXNode
max :: LaTeXNode -> LaTeXNode -> LaTeXNode
$cmin :: LaTeXNode -> LaTeXNode -> LaTeXNode
min :: LaTeXNode -> LaTeXNode -> LaTeXNode
Ord, Int -> LaTeXNode -> ShowS
[LaTeXNode] -> ShowS
LaTeXNode -> String
(Int -> LaTeXNode -> ShowS)
-> (LaTeXNode -> String)
-> ([LaTeXNode] -> ShowS)
-> Show LaTeXNode
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> LaTeXNode -> ShowS
showsPrec :: Int -> LaTeXNode -> ShowS
$cshow :: LaTeXNode -> String
show :: LaTeXNode -> String
$cshowList :: [LaTeXNode] -> ShowS
showList :: [LaTeXNode] -> ShowS
Show, ReadPrec [LaTeXNode]
ReadPrec LaTeXNode
Int -> ReadS LaTeXNode
ReadS [LaTeXNode]
(Int -> ReadS LaTeXNode)
-> ReadS [LaTeXNode]
-> ReadPrec LaTeXNode
-> ReadPrec [LaTeXNode]
-> Read LaTeXNode
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS LaTeXNode
readsPrec :: Int -> ReadS LaTeXNode
$creadList :: ReadS [LaTeXNode]
readList :: ReadS [LaTeXNode]
$creadPrec :: ReadPrec LaTeXNode
readPrec :: ReadPrec LaTeXNode
$creadListPrec :: ReadPrec [LaTeXNode]
readListPrec :: ReadPrec [LaTeXNode]
Read, (forall x. LaTeXNode -> Rep LaTeXNode x)
-> (forall x. Rep LaTeXNode x -> LaTeXNode) -> Generic LaTeXNode
forall x. Rep LaTeXNode x -> LaTeXNode
forall x. LaTeXNode -> Rep LaTeXNode x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. LaTeXNode -> Rep LaTeXNode x
from :: forall x. LaTeXNode -> Rep LaTeXNode x
$cto :: forall x. Rep LaTeXNode x -> LaTeXNode
to :: forall x. Rep LaTeXNode x -> LaTeXNode
Generic, LaTeXNode -> ()
(LaTeXNode -> ()) -> NFData LaTeXNode
forall a. (a -> ()) -> NFData a
$crnf :: LaTeXNode -> ()
rnf :: LaTeXNode -> ()
NFData)
renderLaTeX :: Foldable t => t LaTeXNode -> Text
renderLaTeX :: forall (t :: * -> *). Foldable t => t LaTeXNode -> Text
renderLaTeX = (LaTeXNode -> Text) -> t LaTeXNode -> Text
forall m a. Monoid m => (a -> m) -> t a -> m
forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap LaTeXNode -> Text
go
where
go :: LaTeXNode -> Text
go :: LaTeXNode -> Text
go (Command Text
_ [LAttribute]
_ [LaTeXNode]
n) = [LaTeXNode] -> Text
forall (t :: * -> *). Foldable t => t LaTeXNode -> Text
renderLaTeX [LaTeXNode]
n
go (Text Text
t) = Text
t
go (Comment Text
t) = Text
"%" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
t
escapeLaTeX :: Text -> Text
escapeLaTeX :: Text -> Text
escapeLaTeX = (Char -> Text) -> Text -> Text
T.concatMap \case
Char
'#' -> Text
"\\#"
Char
'$' -> Text
"\\$"
Char
'%' -> Text
"\\%"
Char
'&' -> Text
"\\&"
Char
'_' -> Text
"\\_"
Char
'{' -> Text
"\\{"
Char
'}' -> Text
"\\}"
Char
'\\' -> Text
"\\textbackslash{}"
Char
'^' -> Text
"\\textasciicircum{}"
Char
'~' -> Text
"\\textasciitilde{}"
Char
c -> OneItem Text -> Text
forall x. One x => OneItem x -> x
one Char
OneItem Text
c
instance Expansible LaTeXNode where
expandSubs :: forall s. LaTeXNode -> Ondim s LaTeXNode
expandSubs = \case
Command Text
t [LAttribute]
a [LaTeXNode]
n -> Text -> [LAttribute] -> [LaTeXNode] -> LaTeXNode
Command Text
t ([LAttribute] -> [LaTeXNode] -> LaTeXNode)
-> Ondim s [LAttribute] -> Ondim s ([LaTeXNode] -> LaTeXNode)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [LAttribute] -> Ondim s [LAttribute]
forall s. [LAttribute] -> Ondim s [LAttribute]
forall t s. Expansible t => t -> Ondim s t
expandSubs [LAttribute]
a Ondim s ([LaTeXNode] -> LaTeXNode)
-> Ondim s [LaTeXNode] -> Ondim s LaTeXNode
forall a b. Ondim s (a -> b) -> Ondim s a -> Ondim s b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [LaTeXNode] -> Ondim s [LaTeXNode]
forall s. [LaTeXNode] -> Ondim s [LaTeXNode]
expandLNodes [LaTeXNode]
n
LaTeXNode
t -> LaTeXNode -> Ondim s LaTeXNode
forall a. a -> Ondim s a
forall (m :: * -> *) a. Monad m => a -> m a
return LaTeXNode
t
instance OndimNode LaTeXNode where
children :: LaTeXNode -> [LaTeXNode]
children = \case
Command Text
_ [LAttribute]
_ [LaTeXNode]
c -> [LaTeXNode] -> [LaTeXNode]
forall a. [a] -> [a]
forall (t :: * -> *) a. Foldable t => t a -> [a]
toList [LaTeXNode]
c
LaTeXNode
_ -> []
attributes :: forall s. LaTeXNode -> Ondim s [Attribute]
attributes (Command Text
_ [LAttribute]
a [LaTeXNode]
_) =
([LaTeXNode] -> Text)
-> ([LaTeXNode] -> Text) -> LAttribute -> Attribute
forall a b c d. (a -> b) -> (c -> d) -> (a, c) -> (b, d)
forall (p :: * -> * -> *) a b c d.
Bifunctor p =>
(a -> b) -> (c -> d) -> p a c -> p b d
bimap [LaTeXNode] -> Text
forall (t :: * -> *). Foldable t => t LaTeXNode -> Text
renderLaTeX [LaTeXNode] -> Text
forall (t :: * -> *). Foldable t => t LaTeXNode -> Text
renderLaTeX (LAttribute -> Attribute)
-> Ondim s [LAttribute] -> Ondim s [Attribute]
forall (f :: * -> *) (g :: * -> *) a b.
(Functor f, Functor g) =>
(a -> b) -> f (g a) -> f (g b)
<<$>> [LAttribute] -> Ondim s [LAttribute]
forall s. [LAttribute] -> Ondim s [LAttribute]
forall t s. Expansible t => t -> Ondim s t
expandSubs [LAttribute]
a
attributes LaTeXNode
_ = [Attribute] -> Ondim s [Attribute]
forall a. a -> Ondim s a
forall (f :: * -> *) a. Applicative f => a -> f a
pure []
identify :: LaTeXNode -> Maybe Text
identify = \case
Command Text
t [LAttribute]
_ [LaTeXNode]
_ -> Text -> Maybe Text
forall a. a -> Maybe a
Just Text
t
Text {} -> Maybe Text
forall a. Maybe a
Nothing
Comment {} -> Maybe Text
forall a. Maybe a
Nothing
castFrom :: forall t. (Typeable t) => Maybe (t -> [LaTeXNode])
castFrom :: forall t. Typeable t => Maybe (t -> [LaTeXNode])
castFrom
| Just t :~: LaTeXDoc
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @t @LaTeXDoc = (t -> [LaTeXNode]) -> Maybe (t -> [LaTeXNode])
forall a. a -> Maybe a
Just ([LaTeXNode] -> [LaTeXNode]
forall a. [a] -> [a]
forall (t :: * -> *) a. Foldable t => t a -> [a]
toList ([LaTeXNode] -> [LaTeXNode])
-> (t -> [LaTeXNode]) -> t -> [LaTeXNode]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. t -> [LaTeXNode]
LaTeXDoc -> [LaTeXNode]
documentNodes)
| Just t :~: Text
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @t @Text = (t -> [LaTeXNode]) -> Maybe (t -> [LaTeXNode])
forall a. a -> Maybe a
Just ((t -> [LaTeXNode]) -> Maybe (t -> [LaTeXNode]))
-> (t -> [LaTeXNode]) -> Maybe (t -> [LaTeXNode])
forall a b. (a -> b) -> a -> b
$ OneItem [LaTeXNode] -> [LaTeXNode]
LaTeXNode -> [LaTeXNode]
forall x. One x => OneItem x -> x
one (LaTeXNode -> [LaTeXNode]) -> (t -> LaTeXNode) -> t -> [LaTeXNode]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. t -> LaTeXNode
Text -> LaTeXNode
Text
| Bool
otherwise = Maybe (t -> [LaTeXNode])
forall a. Maybe a
Nothing
newtype LaTeXDoc = LaTeXDoc {LaTeXDoc -> [LaTeXNode]
documentNodes :: [LaTeXNode]}
deriving (LaTeXDoc -> LaTeXDoc -> Bool
(LaTeXDoc -> LaTeXDoc -> Bool)
-> (LaTeXDoc -> LaTeXDoc -> Bool) -> Eq LaTeXDoc
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: LaTeXDoc -> LaTeXDoc -> Bool
== :: LaTeXDoc -> LaTeXDoc -> Bool
$c/= :: LaTeXDoc -> LaTeXDoc -> Bool
/= :: LaTeXDoc -> LaTeXDoc -> Bool
Eq, Eq LaTeXDoc
Eq LaTeXDoc =>
(LaTeXDoc -> LaTeXDoc -> Ordering)
-> (LaTeXDoc -> LaTeXDoc -> Bool)
-> (LaTeXDoc -> LaTeXDoc -> Bool)
-> (LaTeXDoc -> LaTeXDoc -> Bool)
-> (LaTeXDoc -> LaTeXDoc -> Bool)
-> (LaTeXDoc -> LaTeXDoc -> LaTeXDoc)
-> (LaTeXDoc -> LaTeXDoc -> LaTeXDoc)
-> Ord LaTeXDoc
LaTeXDoc -> LaTeXDoc -> Bool
LaTeXDoc -> LaTeXDoc -> Ordering
LaTeXDoc -> LaTeXDoc -> LaTeXDoc
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: LaTeXDoc -> LaTeXDoc -> Ordering
compare :: LaTeXDoc -> LaTeXDoc -> Ordering
$c< :: LaTeXDoc -> LaTeXDoc -> Bool
< :: LaTeXDoc -> LaTeXDoc -> Bool
$c<= :: LaTeXDoc -> LaTeXDoc -> Bool
<= :: LaTeXDoc -> LaTeXDoc -> Bool
$c> :: LaTeXDoc -> LaTeXDoc -> Bool
> :: LaTeXDoc -> LaTeXDoc -> Bool
$c>= :: LaTeXDoc -> LaTeXDoc -> Bool
>= :: LaTeXDoc -> LaTeXDoc -> Bool
$cmax :: LaTeXDoc -> LaTeXDoc -> LaTeXDoc
max :: LaTeXDoc -> LaTeXDoc -> LaTeXDoc
$cmin :: LaTeXDoc -> LaTeXDoc -> LaTeXDoc
min :: LaTeXDoc -> LaTeXDoc -> LaTeXDoc
Ord, Int -> LaTeXDoc -> ShowS
[LaTeXDoc] -> ShowS
LaTeXDoc -> String
(Int -> LaTeXDoc -> ShowS)
-> (LaTeXDoc -> String) -> ([LaTeXDoc] -> ShowS) -> Show LaTeXDoc
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> LaTeXDoc -> ShowS
showsPrec :: Int -> LaTeXDoc -> ShowS
$cshow :: LaTeXDoc -> String
show :: LaTeXDoc -> String
$cshowList :: [LaTeXDoc] -> ShowS
showList :: [LaTeXDoc] -> ShowS
Show, ReadPrec [LaTeXDoc]
ReadPrec LaTeXDoc
Int -> ReadS LaTeXDoc
ReadS [LaTeXDoc]
(Int -> ReadS LaTeXDoc)
-> ReadS [LaTeXDoc]
-> ReadPrec LaTeXDoc
-> ReadPrec [LaTeXDoc]
-> Read LaTeXDoc
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS LaTeXDoc
readsPrec :: Int -> ReadS LaTeXDoc
$creadList :: ReadS [LaTeXDoc]
readList :: ReadS [LaTeXDoc]
$creadPrec :: ReadPrec LaTeXDoc
readPrec :: ReadPrec LaTeXDoc
$creadListPrec :: ReadPrec [LaTeXDoc]
readListPrec :: ReadPrec [LaTeXDoc]
Read, (forall x. LaTeXDoc -> Rep LaTeXDoc x)
-> (forall x. Rep LaTeXDoc x -> LaTeXDoc) -> Generic LaTeXDoc
forall x. Rep LaTeXDoc x -> LaTeXDoc
forall x. LaTeXDoc -> Rep LaTeXDoc x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. LaTeXDoc -> Rep LaTeXDoc x
from :: forall x. LaTeXDoc -> Rep LaTeXDoc x
$cto :: forall x. Rep LaTeXDoc x -> LaTeXDoc
to :: forall x. Rep LaTeXDoc x -> LaTeXDoc
Generic)
deriving anyclass (LaTeXDoc -> ()
(LaTeXDoc -> ()) -> NFData LaTeXDoc
forall a. (a -> ()) -> NFData a
$crnf :: LaTeXDoc -> ()
rnf :: LaTeXDoc -> ()
NFData)
instance Expansible LaTeXDoc where
expandSubs :: forall s. LaTeXDoc -> Ondim s LaTeXDoc
expandSubs = ([LaTeXNode] -> LaTeXDoc)
-> Ondim s [LaTeXNode] -> Ondim s LaTeXDoc
forall a b. (a -> b) -> Ondim s a -> Ondim s b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap [LaTeXNode] -> LaTeXDoc
LaTeXDoc (Ondim s [LaTeXNode] -> Ondim s LaTeXDoc)
-> (LaTeXDoc -> Ondim s [LaTeXNode])
-> LaTeXDoc
-> Ondim s LaTeXDoc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [LaTeXNode] -> Ondim s [LaTeXNode]
forall s. [LaTeXNode] -> Ondim s [LaTeXNode]
expandLNodes ([LaTeXNode] -> Ondim s [LaTeXNode])
-> (LaTeXDoc -> [LaTeXNode]) -> LaTeXDoc -> Ondim s [LaTeXNode]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LaTeXDoc -> [LaTeXNode]
documentNodes
instance OndimNode LaTeXDoc where
renderNode :: Maybe (LaTeXDoc -> LByteString)
renderNode = (LaTeXDoc -> LByteString) -> Maybe (LaTeXDoc -> LByteString)
forall a. a -> Maybe a
Just (Text -> LByteString
forall a b. ConvertUtf8 a b => a -> b
encodeUtf8 (Text -> LByteString)
-> (LaTeXDoc -> Text) -> LaTeXDoc -> LByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [LaTeXNode] -> Text
forall (t :: * -> *). Foldable t => t LaTeXNode -> Text
renderLaTeX ([LaTeXNode] -> Text)
-> (LaTeXDoc -> [LaTeXNode]) -> LaTeXDoc -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LaTeXDoc -> [LaTeXNode]
documentNodes)