-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Convert between Haskell, Markdown, Literate Haskell, TeX -- -- See the README.md @package lima @version 0.2.0.0 -- |
line 1 line 2 -- % line 3 % line 4
[
-- Text {manyLines = ["line2","line 1"]}, Comment {someLines = "line 4"
-- :| ["", "line 3"]} ]
-- >>> pp (def :: Config User)
-- Config {
-- _disable = Just "LIMA_DISABLE",
-- _enable = Just "LIMA_ENABLE",
-- _indent = Just "LIMA_INDENT",
-- _dedent = Just "LIMA_DEDENT",
-- _mdHaskellCodeStart = Just "```haskell",
-- _mdHaskellCodeEnd = Just "```",
-- _texHaskellCodeStart = Just "\\begin{code}",
-- _texHaskellCodeEnd = Just "\\end{code}"
-- }
--
--
-- It's possible to override these names.
--
--
-- >>> pp ((def :: Config User) & disable ?~ "off" & enable ?~ "on" & indent ?~ "indent" & dedent ?~ "dedent")
-- Config {
-- _disable = Just "off",
-- _enable = Just "on",
-- _indent = Just "indent",
-- _dedent = Just "dedent",
-- _mdHaskellCodeStart = Just "```haskell",
-- _mdHaskellCodeEnd = Just "```",
-- _texHaskellCodeStart = Just "\\begin{code}",
-- _texHaskellCodeEnd = Just "\\end{code}"
-- }
--
data Config (a :: Mode')
Config :: Mode a Text -> Mode a Text -> Mode a Text -> Mode a Text -> Mode a Text -> Mode a Text -> Mode a Text -> Mode a Text -> Config (a :: Mode')
-- | Make parser ignore tags and just copy the following lines verbatim.
--
-- Set indentation to 0.
[$sel:_disable:Config] :: Config (a :: Mode') -> Mode a Text
-- | Stop parser from ignoring tags.
[$sel:_enable:Config] :: Config (a :: Mode') -> Mode a Text
-- | Set code indentation to a given Int.
[$sel:_indent:Config] :: Config (a :: Mode') -> Mode a Text
-- | Set code indentation to 0.
[$sel:_dedent:Config] :: Config (a :: Mode') -> Mode a Text
-- | Mark the start of a Haskell code block in Markdown.
[$sel:_mdHaskellCodeStart:Config] :: Config (a :: Mode') -> Mode a Text
-- | Mark the end of a Haskell code block in Markdown.
[$sel:_mdHaskellCodeEnd:Config] :: Config (a :: Mode') -> Mode a Text
-- | Mark the start of a Haskell code block in TeX.
[$sel:_texHaskellCodeStart:Config] :: Config (a :: Mode') -> Mode a Text
-- | Mark the end of a Haskell code block in TeX.
[$sel:_texHaskellCodeEnd:Config] :: Config (a :: Mode') -> Mode a Text
-- | The default value for this type.
def :: Default a => a
-- | Convert a user Config to an internal Config with
-- user-supplied values.
toInternalConfig :: Config User -> Config Internal
-- | Make a user Config with default values from an internal
-- Config.
fromInternalConfig :: Config Internal -> Config User
disable :: forall a_a70q. Lens' (Config a_a70q) (Mode a_a70q Text)
enable :: forall a_a70q. Lens' (Config a_a70q) (Mode a_a70q Text)
indent :: forall a_a70q. Lens' (Config a_a70q) (Mode a_a70q Text)
dedent :: forall a_a70q. Lens' (Config a_a70q) (Mode a_a70q Text)
mdHaskellCodeStart :: forall a_a70q. Lens' (Config a_a70q) (Mode a_a70q Text)
mdHaskellCodeEnd :: forall a_a70q. Lens' (Config a_a70q) (Mode a_a70q Text)
texHaskellCodeStart :: forall a_a70q. Lens' (Config a_a70q) (Mode a_a70q Text)
texHaskellCodeEnd :: forall a_a70q. Lens' (Config a_a70q) (Mode a_a70q Text)
-- | & is a reverse application operator. This provides
-- notational convenience. Its precedence is one higher than that of the
-- forward application operator $, which allows & to be
-- nested in $.
--
-- -- >>> 5 & (+1) & show -- "6" --(&) :: a -> (a -> b) -> b infixl 1 & -- | (?~) is a version of (.~) that wraps the value into -- Just before setting. -- --
-- l ?~ b = l .~ Just b ---- -- It can be useful in combination with at: -- --
-- >>> Map.empty & at 3 ?~ x -- fromList [(3,x)] --(?~) :: ASetter s t a (Maybe b) -> b -> s -> t infixr 4 ?~ -- | A format of a document. data Format -- |
-- Haskell --Hs :: Format -- |
-- Literate Haskell --Lhs :: Format -- |
-- Markdown --Md :: Format -- |
-- TeX --TeX :: Format -- | Compose a function that converts a document in one Format to a -- document in another Format. convertTo :: Format -> Format -> Config User -> Text -> Text -- | Show a Format as a file extension. -- --
-- >>> showFormatExtension Lhs -- "lhs" --showFormatExtension :: Format -> String -- | Show a Format as a full name. -- --
-- >>> showFormatName Lhs -- "Literate Haskell" --showFormatName :: Format -> String -- | Internal representation of a document. -- -- A printer processes a list of Tokens one by one. -- -- A Token can have: -- --
-- >>> pp exampleNonTexTokens'
-- [
-- Indent {n = 3},
-- Disabled {manyLines = ["-- What's the answer?"]},
-- Indent {n = 1},
-- Indent {n = 2},
-- Text {someLines = "- Intermediate results" :| []},
-- HaskellCode {manyLines = [" b = a 4"," a = const 3"]},
-- Dedent,
-- HaskellCode {manyLines = ["answer = b * 14"]},
-- Comment {someLines = "Hello from comments," :| []},
-- Comment {someLines = "world!" :| []},
-- Text {someLines = "world!" :| ["Hello from text,"]},
-- Text {someLines = "here!" :| ["And from"]}
-- ]
--
--
--
-- >>> pp $ mergeTokens exampleNonTexTokens'
-- [
-- Indent {n = 3},
-- Disabled {manyLines = ["-- What's the answer?"]},
-- Indent {n = 1},
-- Indent {n = 2},
-- Text {someLines = "- Intermediate results" :| []},
-- HaskellCode {manyLines = [" b = a 4"," a = const 3"]},
-- Dedent,
-- HaskellCode {manyLines = ["answer = b * 14"]},
-- Comment {someLines = "world!" :| ["","Hello from comments,"]},
-- Text {someLines = "here!" :| ["And from","","world!","Hello from text,"]}
-- ]
--
mergeTokens :: Tokens -> Tokens
-- | Strip empty lines an leading spaces in Tokens.
--
--
-- >>> pp exampleNonTexTokens'
-- [
-- Indent {n = 3},
-- Disabled {manyLines = ["-- What's the answer?"]},
-- Indent {n = 1},
-- Indent {n = 2},
-- Text {someLines = "- Intermediate results" :| []},
-- HaskellCode {manyLines = [" b = a 4"," a = const 3"]},
-- Dedent,
-- HaskellCode {manyLines = ["answer = b * 14"]},
-- Comment {someLines = "Hello from comments," :| []},
-- Comment {someLines = "world!" :| []},
-- Text {someLines = "world!" :| ["Hello from text,"]},
-- Text {someLines = "here!" :| ["And from"]}
-- ]
--
--
--
-- >>> pp $ stripTokens exampleNonTexTokens'
-- [
-- Indent {n = 3},
-- Disabled {manyLines = ["-- What's the answer?"]},
-- Indent {n = 1},
-- Indent {n = 2},
-- Text {someLines = "- Intermediate results" :| []},
-- HaskellCode {manyLines = ["b = a 4","a = const 3"]},
-- Dedent,
-- HaskellCode {manyLines = ["answer = b * 14"]},
-- Comment {someLines = "Hello from comments," :| []},
-- Comment {someLines = "world!" :| []},
-- Text {someLines = "world!" :| ["Hello from text,"]},
-- Text {someLines = "here!" :| ["And from"]}
-- ]
--
stripTokens :: Tokens -> Tokens
-- | mergeTokens and stripTokens.
--
--
-- >>> pp $ normalizeTokens exampleNonTexTokens
-- [
-- Indent {n = 3},
-- Disabled {manyLines = ["-- What's the answer?"]},
-- Indent {n = 1},
-- Indent {n = 2},
-- Text {someLines = "- Intermediate results" :| []},
-- HaskellCode {manyLines = ["b = a 4","a = const 3"]},
-- Dedent,
-- HaskellCode {manyLines = ["answer = b * 14"]},
-- Comment {someLines = "world!" :| ["","Hello from comments,"]},
-- Text {someLines = "here!" :| ["And from","","world!","Hello from text,"]}
-- ]
--
normalizeTokens :: Tokens -> Tokens
-- | Convert Tokens to Haskell code.
--
-- Rules
--
-- {- line 1 -}
-- {- line 1 line 2 -} a = 42
-- >>> pp $ hsFromTokens def exampleNonTexTokens
-- {- LIMA_INDENT 3 -}
--
-- {- LIMA_DISABLE -}
--
-- -- What's the answer?
--
-- {- LIMA_ENABLE -}
--
-- {- LIMA_INDENT 1 -}
--
-- {- LIMA_INDENT 2 -}
--
-- {-
-- - Intermediate results
-- -}
--
-- a = const 3
-- b = a 4
--
-- {- LIMA_DEDENT -}
--
-- answer = b * 14
--
-- {- Hello from comments,
--
-- world!
-- -}
--
-- {-
-- Hello from text,
-- world!
--
-- And from
-- here!
-- -}
--
hsFromTokens :: Config User -> Tokens -> Text
-- | Convert Tokens to Haskell code.
--
-- Each Token becomes a Text in a list.
--
-- These Texts are concatenated in hsFromTokens.
hsFromTokens' :: Config User -> Tokens -> [Text]
-- | Convert Tokens to Literate Haskell code.
--
-- Rules
--
-- % Hello, % world! -- % Hello, % user!
> a4 = 4 > a2 = -- 2
-- >>> pp $ lhsFromTokens def exampleNonTexTokens -- % LIMA_INDENT 3 -- -- % LIMA_DISABLE -- -- % -- What's the answer? -- -- % LIMA_ENABLE -- -- % LIMA_INDENT 1 -- -- % LIMA_INDENT 2 -- -- - Intermediate results -- > a = const 3 -- > b = a 4 -- -- % LIMA_DEDENT -- -- > answer = b * 14 -- -- % Hello from comments, -- -- % world! -- -- Hello from text, -- world! -- -- And from -- here! --lhsFromTokens :: Config User -> Tokens -> Text -- | Convert Tokens to Literate Haskell code. -- -- Each Token becomes a Text in a list. -- -- These Texts are concatenated in lhsFromTokens. lhsFromTokens' :: Config User -> Tokens -> [Text] -- | Convert Tokens to Markdown code. -- -- Rules -- --
<!-- LIMA_DISABLE a4 = 4 a2 = 2 LIMA_ENABLE -- -->
<!-- line 1 line 2 --> --
```haskell a4 = 2 ```
Hello, world!
-- >>> pp $ mdFromTokens def exampleNonTexTokens -- <!-- LIMA_INDENT 3 --> -- -- <!-- LIMA_DISABLE -- -- -- What's the answer? -- -- LIMA_ENABLE --> -- -- <!-- LIMA_INDENT 1 --> -- -- <!-- LIMA_INDENT 2 --> -- -- - Intermediate results -- -- ```haskell -- a = const 3 -- b = a 4 -- ``` -- -- <!-- LIMA_DEDENT --> -- -- ```haskell -- answer = b * 14 -- ``` -- -- <!-- Hello from comments, -- -- world! -- --> -- -- Hello from text, -- world! -- -- And from -- here! --mdFromTokens :: Config User -> Tokens -> Text -- | Convert Tokens to Haskell code. -- -- Each Token becomes a Text in a list. -- -- These Texts are concatenated in mdFromTokens. mdFromTokens' :: Config User -> Tokens -> [Text] -- | Convert Tokens to TeX code. -- -- Rules -- --
% Hello, % world! % Hello, % -- user!
-- >>> pp $ texFromTokens def exampleTexTokens
-- % LIMA_DISABLE
--
-- % -- What's the answer?
--
-- % LIMA_ENABLE
--
-- % LIMA_INDENT 1
--
-- % LIMA_INDENT 2
--
-- Intermediate results
--
-- \begin{code}
-- a = const 3
-- b = a 4
-- \end{code}
--
-- % LIMA_DEDENT
--
-- \begin{code}
-- answer = b * 14
-- \end{code}
--
-- % Hello from comments,
--
-- % world!
--
-- Hello from text,
-- world!
--
texFromTokens :: Config User -> Tokens -> Text
-- | Convert Tokens to TeX code.
--
-- Each Token becomes a Text in a list.
--
-- These Texts are concatenated in texFromTokens.
texFromTokens' :: Config User -> Tokens -> [Text]
-- | Convert Tokens to Markdown code.
--
-- Inverse of lhsFromTokens.
--
-- -- >>> (lhsToTokens def $ lhsFromTokens def exampleNonTexTokens) == exampleNonTexTokens -- True --lhsToTokens :: Config User -> Text -> Tokens -- | Convert Tokens to Haskell code. -- -- Inverse of hsFromTokens. -- --
-- >>> (hsToTokens def $ hsFromTokens def exampleNonTexTokens) == exampleNonTexTokens -- True --hsToTokens :: Config User -> Text -> Tokens -- | Convert Tokens to TeX code. -- -- Inverse of texFromTokens. -- --
-- >>> (texToTokens def $ texFromTokens def exampleTexTokens) == exampleTexTokens -- True --texToTokens :: Config User -> Text -> Tokens -- | Convert Tokens to Markdown code. -- -- Inverse of mdFromTokens. -- --
-- >>> (mdToTokens def $ mdFromTokens def exampleNonTexTokens) == exampleNonTexTokens -- True --mdToTokens :: Config User -> Text -> Tokens -- | Example non-TeX Tokens. See exampleTexTokens. -- -- When printed to a TeX document, these Tokens can't be -- correctly parsed. This is because they don't have necessary tags -- surrounding Haskell code blocks. -- --
-- >>> pp $ exampleNonTexTokens'
-- [
-- Indent {n = 3},
-- Disabled {manyLines = ["-- What's the answer?"]},
-- Indent {n = 1},
-- Indent {n = 2},
-- Text {someLines = "- Intermediate results" :| []},
-- HaskellCode {manyLines = [" b = a 4"," a = const 3"]},
-- Dedent,
-- HaskellCode {manyLines = ["answer = b * 14"]},
-- Comment {someLines = "Hello from comments," :| []},
-- Comment {someLines = "world!" :| []},
-- Text {someLines = "world!" :| ["Hello from text,"]},
-- Text {someLines = "here!" :| ["And from"]}
-- ]
--
exampleNonTexTokens' :: Tokens
-- | Normalized exampleNonTexTokens'.
--
--
-- >>> pp $ exampleNonTexTokens
-- [
-- Indent {n = 3},
-- Disabled {manyLines = ["-- What's the answer?"]},
-- Indent {n = 1},
-- Indent {n = 2},
-- Text {someLines = "- Intermediate results" :| []},
-- HaskellCode {manyLines = ["b = a 4","a = const 3"]},
-- Dedent,
-- HaskellCode {manyLines = ["answer = b * 14"]},
-- Comment {someLines = "world!" :| ["","Hello from comments,"]},
-- Text {someLines = "here!" :| ["And from","","world!","Hello from text,"]}
-- ]
--
exampleNonTexTokens :: Tokens
-- | same as exampleNonTexTokens, but with TeX-specific
-- tags that make Haskell code blocks correctly parsable.
--
--
-- >>> pp $ exampleTexTokens
-- [
-- Disabled {manyLines = ["-- What's the answer?"]},
-- Indent {n = 1},
-- Indent {n = 2},
-- Text {someLines = "\\begin{code}" :| ["","Intermediate results"]},
-- HaskellCode {manyLines = ["b = a 4","a = const 3"]},
-- Text {someLines = "\\end{code}" :| []},
-- Dedent,
-- Text {someLines = "\\begin{code}" :| []},
-- HaskellCode {manyLines = ["answer = b * 14"]},
-- Text {someLines = "\\end{code}" :| []},
-- Comment {someLines = "world!" :| ["","Hello from comments,"]},
-- Text {someLines = "world!" :| ["Hello from text,"]}
-- ]
--
exampleTexTokens :: Tokens
-- | Remove empty lines from the beginning and the end of a list.
stripEmpties :: [Text] -> [Text]
-- | A class for prettyprinting data on multiple lines in haddocks.
--
-- It's not meant to be used outside of this library.
class Show a => PrettyPrint a
pp :: PrettyPrint a => a -> Pretty String
instance GHC.Classes.Eq Converter.Token
instance Data.Data.Data Converter.Token
instance GHC.Show.Show Converter.Token
instance GHC.Generics.Generic Converter.State
instance GHC.Show.Show (Converter.Config Converter.User)
instance GHC.Classes.Eq (Converter.Config Converter.User)
instance GHC.Show.Show (Converter.Config Converter.Internal)
instance Data.Default.Class.Default Converter.State
instance Converter.PrettyPrint Converter.Tokens
instance Converter.PrettyPrint GHC.Base.String
instance Converter.PrettyPrint Data.Text.Internal.Text
instance Converter.PrettyPrint (Converter.Config Converter.User)
instance GHC.Show.Show a => GHC.Show.Show (Converter.Pretty a)
instance Data.Default.Class.Default (Converter.Config Converter.Internal)
instance Data.Default.Class.Default (Converter.Config Converter.User)
instance GHC.Generics.Generic (Converter.Config a)