unison-syntax-0.0.0
Safe HaskellSafe-Inferred
LanguageHaskell2010

Unison.Syntax.Parser.Doc

Description

The parser for Unison’s Doc syntax.

This is completely independent of the Unison language, and requires a couple parsers to be passed in to then provide a parser for Doc applied to any host language.

  • an identifer parser
  • a code parser (that accepts a termination parser)
  • a termination parser, for this parser to know when to give up

Each of those parsers is expected to satisfy (Ord e, MonadParsec e String m).

Synopsis

Documentation

type Tree ident code = Cofree (Top code (Leaves ident code)) Ann Source #

type Leaves ident code = Cofree (Leaf ident code) Ann Source #

initialEnv :: ParsingEnv Source #

doc :: (Ord e, MonadParsec e String m) => m ident -> (m () -> m code) -> m end -> m (UntitledSection (Tree ident code)) Source #

untitledSection :: MonadParsec e String m => m a -> m (UntitledSection a) Source #

This is the actual Doc lexer. Unlike doc2, it doesn’t do any Unison-side lexing (i.e., it doesn’t know that Unison wraps Doc literals in `}}`).

sectionElem :: (Ord e, MonadParsec e String m) => m ident -> (m () -> m code) -> m () -> ReaderT ParsingEnv m (Top code (Leaves ident code) (Tree ident code)) Source #

leaf :: (Ord e, MonadParsec e String m) => m ident -> (m () -> m code) -> m () -> m (Leaf ident code (Leaves ident code)) Source #

section elements

section :: (Ord e, MonadParsec e String m) => m ident -> (m () -> m code) -> m () -> ReaderT ParsingEnv m (Top code (Leaves ident code) (Tree ident code)) Source #

## Section title

A paragraph under this section.
Part of the same paragraph. Blanklines separate paragraphs.

### A subsection title

A paragraph under this subsection.

# A section title (not a subsection)

eval :: MonadParsec e String m => (m () -> m code) -> m (Top code (Leaves ident code) (Tree ident code)) Source #

exampleBlock :: MonadParsec e String m => (m () -> m code) -> m (Top code (Leaves ident code) (Tree ident code)) Source #

codeBlock :: (Ord e, MonadParsec e String m) => m (Top code (Leaves ident code) (Tree ident code)) Source #

list :: (Ord e, MonadParsec e String m) => m ident -> (m () -> m code) -> m () -> ReaderT ParsingEnv m (List (Leaves ident code)) Source #

Not an actual node, but this pattern is referenced in multiple places

bulletedList :: (Ord e, MonadParsec e String m) => m ident -> (m () -> m code) -> m () -> ReaderT ParsingEnv m (List (Leaves ident code)) Source #

FIXME: This should take a P a

numberedList :: (Ord e, MonadParsec e String m) => m ident -> (m () -> m code) -> m () -> ReaderT ParsingEnv m (List (Leaves ident code)) Source #

FIXME: This should take a P a

paragraph :: (Ord e, MonadParsec e String m) => m ident -> (m () -> m code) -> m () -> m (Paragraph (Leaves ident code)) Source #

leaves

link :: (Ord e, MonadParsec e String m) => m ident -> m (Leaf ident code a) Source #

namedLink :: (Ord e, MonadParsec e String m) => m ident -> (m () -> m code) -> m () -> m (Leaf ident code (Leaves ident code)) Source #

example :: MonadParsec e String m => (m () -> m code) -> m (Leaf ident code void) Source #

transclude :: MonadParsec e String m => (m () -> m code) -> m (Transclude code) Source #

bold :: (Ord e, MonadParsec e String m) => m ident -> (m () -> m code) -> m () -> m (Leaf ident code (Leaves ident code)) Source #

italic :: (Ord e, MonadParsec e String m) => m ident -> (m () -> m code) -> m () -> m (Leaf ident code (Leaves ident code)) Source #

strikethrough :: (Ord e, MonadParsec e String m) => m ident -> (m () -> m code) -> m () -> m (Leaf ident code (Leaves ident code)) Source #

verbatim :: (Ord e, MonadParsec e String m) => m (Leaf ident code a) Source #

source :: (Ord e, MonadParsec e String m) => m ident -> (m () -> m code) -> m (Leaf ident code a) Source #

foldedSource :: (Ord e, MonadParsec e String m) => m ident -> (m () -> m code) -> m (Leaf ident code a) Source #

evalInline :: MonadParsec e String m => (m () -> m code) -> m (Leaf ident code a) Source #

signatures :: (Ord e, MonadParsec e String m) => m ident -> m (Leaf ident code a) Source #

signatureInline :: (Ord e, MonadParsec e String m) => m ident -> m (Leaf ident code a) Source #

group :: MonadParsec e s m => m (NonEmpty (Leaves ident code)) -> m (Group (Leaves ident code)) Source #

FIXME: This should just take a P code and P a.

word :: (Ord e, MonadParsec e String m) => m end -> m Word Source #

other components

column' :: (Ord e, MonadParsec e String m) => m ident -> (m () -> m code) -> m () -> Int -> ReaderT ParsingEnv m (Column (Leaves ident code)) Source #

embedLink :: (Ord e, MonadParsec e s m, TraversableStream s) => m ident -> m (EmbedLink ident) Source #

Not an actual node, but this pattern is referenced in multiple places

embedSignatureLink :: (Ord e, MonadParsec e String m) => m ident -> m (EmbedSignatureLink ident) Source #

join :: MonadParsec e s m => m (NonEmpty a) -> m (Join a) Source #

FIXME: This should just take a P a