module Examples.Lang.ArithBlocks where

import UVMHS

syntax  LexerWSBasicSyntax
syntax :: LexerWSBasicSyntax
syntax = LexerWSBasicSyntax
forall a. Null a => a
null
  { lexerWSBasicSyntaxBase = null
    { lexerBasicSyntaxPuns = pow ["(",")"]
    , lexerBasicSyntaxOprs = pow ["==","+","*","-","^","!"]
    }
  , lexerWSBasicSyntaxBlocks = pow ["local"]
  }

lexer  Lexer CharClass  TokenClassWSBasic ℕ64 TokenWSBasic
lexer :: Lexer CharClass ℂ TokenClassWSBasic ℕ64 TokenWSBasic
lexer = LexerWSBasicSyntax
-> Lexer CharClass ℂ TokenClassWSBasic ℕ64 TokenWSBasic
lexerWSBasic LexerWSBasicSyntax
syntax

testTokenizerSuccess  IO ()
testTokenizerSuccess :: IO ()
testTokenizerSuccess =
  Lexer CharClass ℂ TokenClassWSBasic ℕ64 TokenWSBasic
-> Text
-> (𝕍 (PreParserToken TokenWSBasic)
    -> 𝕍 (PreParserToken TokenWSBasic))
-> 𝕍 (ParserToken ℂ)
-> IO ()
forall c t o u w w'.
(Show u, Ord c, Ord t, Pretty t, Classified c t, Eq o, Eq u,
 Plus u, Pretty w') =>
Lexer c t o u w
-> Text
-> (𝕍 (PreParserToken w) -> 𝕍 (PreParserToken w'))
-> 𝕍 (ParserToken t)
-> IO ()
tokenizeFIOMain Lexer CharClass ℂ TokenClassWSBasic ℕ64 TokenWSBasic
lexer Text
"" 𝕍 (PreParserToken TokenWSBasic) -> 𝕍 (PreParserToken TokenWSBasic)
blockifyTokensWSBasic (𝕍 (ParserToken ℂ) -> IO ()) -> 𝕍 (ParserToken ℂ) -> IO ()
forall a b. (a -> b) -> a -> b
$ Text -> 𝕍 (ParserToken ℂ)
tokens (Text -> 𝕍 (ParserToken ℂ)) -> Text -> 𝕍 (ParserToken ℂ)
forall a b. (a -> b) -> a -> b
$ 𝐼 Text -> Text
forall a t. (Monoid a, ToIter a t) => t -> a
concat (𝐼 Text -> Text) -> 𝐼 Text -> Text
forall a b. (a -> b) -> a -> b
$ Text -> [Text] -> 𝐼 Text
forall a t. ToIter a t => a -> t -> 𝐼 a
inbetween Text
"\n"
    [ Text
"1 -- blah"
    , Text
"2"
    , Text
"3 4"
    , Text
"  5"
    , Text
"local 6"
    , Text
"7"
    , Text
"local 8"
    , Text
"      9"
    , Text
"local"
    , Text
"10"
    , Text
"local local "
    , Text
"      local"
    ]

data Lit =
    IntegerL 
  | DoubleL 𝔻
  | StringL 𝕊
makePrettySum ''Lit

data Atom =
    LitA Lit
  | NameA 𝕊
makePrettySum ''Atom

type Exp = 𝐴 SrcCxt ExpPre
data ExpPre =
    AtomE Atom
  | PlusE Exp Exp
  | TimesE Exp Exp
  | ExpoE Exp Exp
  | FactE Exp
  | NegateE Exp
  | EqualE Exp Exp
  | BlockE (𝐿 Exp)
makePrisms ''ExpPre
makePrettySum ''ExpPre

cpLit  CParser TokenWSBasic Lit
cpLit :: CParser TokenWSBasic Lit
cpLit = [CParser TokenWSBasic Lit] -> CParser TokenWSBasic Lit
forall (m :: * -> *) a t.
(Monad m, MonadFail m, ToIter (m a) t) =>
t -> m a
tries
  [ ℤ -> Lit
IntegerL (ℤ -> Lit) -> CParser TokenWSBasic ℤ -> CParser TokenWSBasic Lit
forall (t :: * -> *) a b. Functor t => (a -> b) -> t a -> t b
^$ CParser TokenWSBasic ℤ
cpIntegerWS
  , 𝔻 -> Lit
DoubleL (𝔻 -> Lit) -> CParser TokenWSBasic 𝔻 -> CParser TokenWSBasic Lit
forall (t :: * -> *) a b. Functor t => (a -> b) -> t a -> t b
^$ CParser TokenWSBasic 𝔻
cpDoubleWS
  , Text -> Lit
StringL (Text -> Lit)
-> CParser TokenWSBasic Text -> CParser TokenWSBasic Lit
forall (t :: * -> *) a b. Functor t => (a -> b) -> t a -> t b
^$ CParser TokenWSBasic Text
cpStringWS
  ]

cpAtom  CParser TokenWSBasic Atom
cpAtom :: CParser TokenWSBasic Atom
cpAtom = Text -> CParser TokenWSBasic Atom -> CParser TokenWSBasic Atom
forall t a. Ord t => Text -> CParser t a -> CParser t a
cpNewContext Text
"atom" (CParser TokenWSBasic Atom -> CParser TokenWSBasic Atom)
-> CParser TokenWSBasic Atom -> CParser TokenWSBasic Atom
forall a b. (a -> b) -> a -> b
$ [CParser TokenWSBasic Atom] -> CParser TokenWSBasic Atom
forall (m :: * -> *) a t.
(Monad m, MonadFail m, ToIter (m a) t) =>
t -> m a
tries
  [ Lit -> Atom
LitA (Lit -> Atom)
-> CParser TokenWSBasic Lit -> CParser TokenWSBasic Atom
forall (t :: * -> *) a b. Functor t => (a -> b) -> t a -> t b
^$ CParser TokenWSBasic Lit
cpLit
  , Text -> Atom
NameA (Text -> Atom)
-> CParser TokenWSBasic Text -> CParser TokenWSBasic Atom
forall (t :: * -> *) a b. Functor t => (a -> b) -> t a -> t b
^$ (TokenWSBasic -> 𝑂 Text) -> CParser TokenWSBasic Text
forall t a. (t -> 𝑂 a) -> CParser t a
cpShaped ((TokenWSBasic -> 𝑂 Text) -> CParser TokenWSBasic Text)
-> (TokenWSBasic -> 𝑂 Text) -> CParser TokenWSBasic Text
forall a b. (a -> b) -> a -> b
$ (TokenWSBasic ⌲ Text) -> TokenWSBasic -> 𝑂 Text
forall a b. (a ⌲ b) -> a -> 𝑂 b
view TokenWSBasic ⌲ Text
nameTWSBasicL
  ]

cpBlock  CParser TokenWSBasic (𝐿 Exp)
cpBlock :: CParser TokenWSBasic (𝐿 Exp)
cpBlock = Text
-> CParser TokenWSBasic (𝐿 Exp) -> CParser TokenWSBasic (𝐿 Exp)
forall t a. Ord t => Text -> CParser t a -> CParser t a
cpNewContext Text
"block" (CParser TokenWSBasic (𝐿 Exp) -> CParser TokenWSBasic (𝐿 Exp))
-> CParser TokenWSBasic (𝐿 Exp) -> CParser TokenWSBasic (𝐿 Exp)
forall a b. (a -> b) -> a -> b
$ do
  CParser TokenWSBasic TokenWSBasic -> CParser TokenWSBasic ()
forall (m :: * -> *) a. Functor m => m a -> m ()
void (CParser TokenWSBasic TokenWSBasic -> CParser TokenWSBasic ())
-> CParser TokenWSBasic TokenWSBasic -> CParser TokenWSBasic ()
forall a b. (a -> b) -> a -> b
$ Text -> CParser TokenWSBasic TokenWSBasic
cpBlockWS Text
"local"
  CParser TokenWSBasic () -> CParser TokenWSBasic ()
forall (m :: * -> *) a. Functor m => m a -> m ()
void (CParser TokenWSBasic () -> CParser TokenWSBasic ())
-> CParser TokenWSBasic () -> CParser TokenWSBasic ()
forall a b. (a -> b) -> a -> b
$ CParser TokenWSBasic ()
cpOpenWS
  𝐿 Exp
es  CParser TokenWSBasic (𝐿 Exp)
cpExpList
  CParser TokenWSBasic () -> CParser TokenWSBasic ()
forall (m :: * -> *) a. Functor m => m a -> m ()
void (CParser TokenWSBasic () -> CParser TokenWSBasic ())
-> CParser TokenWSBasic () -> CParser TokenWSBasic ()
forall a b. (a -> b) -> a -> b
$ CParser TokenWSBasic ()
cpCloseWS
  𝐿 Exp -> CParser TokenWSBasic (𝐿 Exp)
forall a. a -> CParser TokenWSBasic a
forall (m :: * -> *) a. Return m => a -> m a
return 𝐿 Exp
es

cpExp  CParser TokenWSBasic Exp
cpExp :: CParser TokenWSBasic Exp
cpExp = Text
-> MixfixF TokenWSBasic (𝐴 SrcCxt) ExpPre
-> CParser TokenWSBasic Exp
forall t a.
Ord t =>
Text -> MixfixF t (𝐴 SrcCxt) a -> CParser t (𝐴 SrcCxt a)
fmixfixWithContext Text
"exp" (MixfixF TokenWSBasic (𝐴 SrcCxt) ExpPre
 -> CParser TokenWSBasic Exp)
-> MixfixF TokenWSBasic (𝐴 SrcCxt) ExpPre
-> CParser TokenWSBasic Exp
forall a b. (a -> b) -> a -> b
$ [MixfixF TokenWSBasic (𝐴 SrcCxt) ExpPre]
-> MixfixF TokenWSBasic (𝐴 SrcCxt) ExpPre
forall a t. (Monoid a, ToIter a t) => t -> a
concat
  [ CParser TokenWSBasic ExpPre
-> MixfixF TokenWSBasic (𝐴 SrcCxt) ExpPre
forall t a (f :: * -> *). CParser t a -> MixfixF t f a
fmixTerminal (CParser TokenWSBasic ExpPre
 -> MixfixF TokenWSBasic (𝐴 SrcCxt) ExpPre)
-> CParser TokenWSBasic ExpPre
-> MixfixF TokenWSBasic (𝐴 SrcCxt) ExpPre
forall a b. (a -> b) -> a -> b
$ do
      CParser TokenWSBasic TokenWSBasic -> CParser TokenWSBasic ()
forall (m :: * -> *) a. Functor m => m a -> m ()
void (CParser TokenWSBasic TokenWSBasic -> CParser TokenWSBasic ())
-> CParser TokenWSBasic TokenWSBasic -> CParser TokenWSBasic ()
forall a b. (a -> b) -> a -> b
$ TokenWSBasic -> CParser TokenWSBasic TokenWSBasic
forall t. Ord t => t -> CParser t t
cpToken (TokenWSBasic -> CParser TokenWSBasic TokenWSBasic)
-> TokenWSBasic -> CParser TokenWSBasic TokenWSBasic
forall a b. (a -> b) -> a -> b
$ Text -> TokenWSBasic
SyntaxTWSBasic Text
"("
      Exp
e  CParser TokenWSBasic Exp
cpExp
      CParser TokenWSBasic TokenWSBasic -> CParser TokenWSBasic ()
forall (m :: * -> *) a. Functor m => m a -> m ()
void (CParser TokenWSBasic TokenWSBasic -> CParser TokenWSBasic ())
-> CParser TokenWSBasic TokenWSBasic -> CParser TokenWSBasic ()
forall a b. (a -> b) -> a -> b
$ TokenWSBasic -> CParser TokenWSBasic TokenWSBasic
forall t. Ord t => t -> CParser t t
cpToken (TokenWSBasic -> CParser TokenWSBasic TokenWSBasic)
-> TokenWSBasic -> CParser TokenWSBasic TokenWSBasic
forall a b. (a -> b) -> a -> b
$ Text -> TokenWSBasic
SyntaxTWSBasic Text
")"
      ExpPre -> CParser TokenWSBasic ExpPre
forall a. a -> CParser TokenWSBasic a
forall (m :: * -> *) a. Return m => a -> m a
return (ExpPre -> CParser TokenWSBasic ExpPre)
-> ExpPre -> CParser TokenWSBasic ExpPre
forall a b. (a -> b) -> a -> b
$ Exp -> ExpPre
forall a. 𝐴 SrcCxt a -> a
forall (w :: * -> *) a. Extract w => w a -> a
extract Exp
e
  , CParser TokenWSBasic ExpPre
-> MixfixF TokenWSBasic (𝐴 SrcCxt) ExpPre
forall t a (f :: * -> *). CParser t a -> MixfixF t f a
fmixTerminal       (CParser TokenWSBasic ExpPre
 -> MixfixF TokenWSBasic (𝐴 SrcCxt) ExpPre)
-> CParser TokenWSBasic ExpPre
-> MixfixF TokenWSBasic (𝐴 SrcCxt) ExpPre
forall a b. (a -> b) -> a -> b
$ Atom -> ExpPre
AtomE         (Atom -> ExpPre)
-> CParser TokenWSBasic Atom -> CParser TokenWSBasic ExpPre
forall (t :: * -> *) a b. Functor t => (a -> b) -> t a -> t b
^$ CParser TokenWSBasic Atom
cpAtom
  , ℕ64
-> CParser TokenWSBasic (Exp -> Exp -> ExpPre)
-> MixfixF TokenWSBasic (𝐴 SrcCxt) ExpPre
forall t (f :: * -> *) a.
ℕ64 -> CParser t (f a -> f a -> a) -> MixfixF t f a
fmixInfix   ℕ64
pCMP   (CParser TokenWSBasic (Exp -> Exp -> ExpPre)
 -> MixfixF TokenWSBasic (𝐴 SrcCxt) ExpPre)
-> CParser TokenWSBasic (Exp -> Exp -> ExpPre)
-> MixfixF TokenWSBasic (𝐴 SrcCxt) ExpPre
forall a b. (a -> b) -> a -> b
$ (Exp -> Exp -> ExpPre) -> TokenWSBasic -> Exp -> Exp -> ExpPre
forall a b. a -> b -> a
const Exp -> Exp -> ExpPre
EqualE  (TokenWSBasic -> Exp -> Exp -> ExpPre)
-> CParser TokenWSBasic TokenWSBasic
-> CParser TokenWSBasic (Exp -> Exp -> ExpPre)
forall (t :: * -> *) a b. Functor t => (a -> b) -> t a -> t b
^$ Text -> CParser TokenWSBasic TokenWSBasic
cpSyntaxWS Text
"=="
  , ℕ64
-> CParser TokenWSBasic (Exp -> Exp -> ExpPre)
-> MixfixF TokenWSBasic (𝐴 SrcCxt) ExpPre
forall t (f :: * -> *) a.
ℕ64 -> CParser t (f a -> f a -> a) -> MixfixF t f a
fmixInfixR  ℕ64
pPLUS  (CParser TokenWSBasic (Exp -> Exp -> ExpPre)
 -> MixfixF TokenWSBasic (𝐴 SrcCxt) ExpPre)
-> CParser TokenWSBasic (Exp -> Exp -> ExpPre)
-> MixfixF TokenWSBasic (𝐴 SrcCxt) ExpPre
forall a b. (a -> b) -> a -> b
$ (Exp -> Exp -> ExpPre) -> TokenWSBasic -> Exp -> Exp -> ExpPre
forall a b. a -> b -> a
const Exp -> Exp -> ExpPre
PlusE   (TokenWSBasic -> Exp -> Exp -> ExpPre)
-> CParser TokenWSBasic TokenWSBasic
-> CParser TokenWSBasic (Exp -> Exp -> ExpPre)
forall (t :: * -> *) a b. Functor t => (a -> b) -> t a -> t b
^$ Text -> CParser TokenWSBasic TokenWSBasic
cpSyntaxWS Text
"+"
  , ℕ64
-> CParser TokenWSBasic (Exp -> Exp -> ExpPre)
-> MixfixF TokenWSBasic (𝐴 SrcCxt) ExpPre
forall t (f :: * -> *) a.
ℕ64 -> CParser t (f a -> f a -> a) -> MixfixF t f a
fmixInfixR  ℕ64
pTIMES (CParser TokenWSBasic (Exp -> Exp -> ExpPre)
 -> MixfixF TokenWSBasic (𝐴 SrcCxt) ExpPre)
-> CParser TokenWSBasic (Exp -> Exp -> ExpPre)
-> MixfixF TokenWSBasic (𝐴 SrcCxt) ExpPre
forall a b. (a -> b) -> a -> b
$ (Exp -> Exp -> ExpPre) -> TokenWSBasic -> Exp -> Exp -> ExpPre
forall a b. a -> b -> a
const Exp -> Exp -> ExpPre
TimesE  (TokenWSBasic -> Exp -> Exp -> ExpPre)
-> CParser TokenWSBasic TokenWSBasic
-> CParser TokenWSBasic (Exp -> Exp -> ExpPre)
forall (t :: * -> *) a b. Functor t => (a -> b) -> t a -> t b
^$ Text -> CParser TokenWSBasic TokenWSBasic
cpSyntaxWS Text
"*"
  , ℕ64
-> CParser TokenWSBasic (Exp -> ExpPre)
-> MixfixF TokenWSBasic (𝐴 SrcCxt) ExpPre
forall t (f :: * -> *) a.
ℕ64 -> CParser t (f a -> a) -> MixfixF t f a
fmixPrefix  ℕ64
pNEG   (CParser TokenWSBasic (Exp -> ExpPre)
 -> MixfixF TokenWSBasic (𝐴 SrcCxt) ExpPre)
-> CParser TokenWSBasic (Exp -> ExpPre)
-> MixfixF TokenWSBasic (𝐴 SrcCxt) ExpPre
forall a b. (a -> b) -> a -> b
$ (Exp -> ExpPre) -> TokenWSBasic -> Exp -> ExpPre
forall a b. a -> b -> a
const Exp -> ExpPre
NegateE (TokenWSBasic -> Exp -> ExpPre)
-> CParser TokenWSBasic TokenWSBasic
-> CParser TokenWSBasic (Exp -> ExpPre)
forall (t :: * -> *) a b. Functor t => (a -> b) -> t a -> t b
^$ Text -> CParser TokenWSBasic TokenWSBasic
cpSyntaxWS Text
"-"
  , ℕ64
-> CParser TokenWSBasic (Exp -> Exp -> ExpPre)
-> MixfixF TokenWSBasic (𝐴 SrcCxt) ExpPre
forall t (f :: * -> *) a.
ℕ64 -> CParser t (f a -> f a -> a) -> MixfixF t f a
fmixInfixL  ℕ64
pPOW   (CParser TokenWSBasic (Exp -> Exp -> ExpPre)
 -> MixfixF TokenWSBasic (𝐴 SrcCxt) ExpPre)
-> CParser TokenWSBasic (Exp -> Exp -> ExpPre)
-> MixfixF TokenWSBasic (𝐴 SrcCxt) ExpPre
forall a b. (a -> b) -> a -> b
$ (Exp -> Exp -> ExpPre) -> TokenWSBasic -> Exp -> Exp -> ExpPre
forall a b. a -> b -> a
const Exp -> Exp -> ExpPre
ExpoE   (TokenWSBasic -> Exp -> Exp -> ExpPre)
-> CParser TokenWSBasic TokenWSBasic
-> CParser TokenWSBasic (Exp -> Exp -> ExpPre)
forall (t :: * -> *) a b. Functor t => (a -> b) -> t a -> t b
^$ Text -> CParser TokenWSBasic TokenWSBasic
cpSyntaxWS Text
"^"
  , ℕ64
-> CParser TokenWSBasic (Exp -> ExpPre)
-> MixfixF TokenWSBasic (𝐴 SrcCxt) ExpPre
forall t (f :: * -> *) a.
ℕ64 -> CParser t (f a -> a) -> MixfixF t f a
fmixPostfix ℕ64
pFAC   (CParser TokenWSBasic (Exp -> ExpPre)
 -> MixfixF TokenWSBasic (𝐴 SrcCxt) ExpPre)
-> CParser TokenWSBasic (Exp -> ExpPre)
-> MixfixF TokenWSBasic (𝐴 SrcCxt) ExpPre
forall a b. (a -> b) -> a -> b
$ (Exp -> ExpPre) -> TokenWSBasic -> Exp -> ExpPre
forall a b. a -> b -> a
const Exp -> ExpPre
FactE   (TokenWSBasic -> Exp -> ExpPre)
-> CParser TokenWSBasic TokenWSBasic
-> CParser TokenWSBasic (Exp -> ExpPre)
forall (t :: * -> *) a b. Functor t => (a -> b) -> t a -> t b
^$ Text -> CParser TokenWSBasic TokenWSBasic
cpSyntaxWS Text
"!"
  , CParser TokenWSBasic ExpPre
-> MixfixF TokenWSBasic (𝐴 SrcCxt) ExpPre
forall t a (f :: * -> *). CParser t a -> MixfixF t f a
fmixTerminal (CParser TokenWSBasic ExpPre
 -> MixfixF TokenWSBasic (𝐴 SrcCxt) ExpPre)
-> CParser TokenWSBasic ExpPre
-> MixfixF TokenWSBasic (𝐴 SrcCxt) ExpPre
forall a b. (a -> b) -> a -> b
$ 𝐿 Exp -> ExpPre
BlockE (𝐿 Exp -> ExpPre)
-> CParser TokenWSBasic (𝐿 Exp) -> CParser TokenWSBasic ExpPre
forall (t :: * -> *) a b. Functor t => (a -> b) -> t a -> t b
^$ CParser TokenWSBasic (𝐿 Exp)
cpBlock
  ]

cpExpList  CParser TokenWSBasic (𝐿 Exp)
cpExpList :: CParser TokenWSBasic (𝐿 Exp)
cpExpList = CParser TokenWSBasic ()
-> CParser TokenWSBasic Exp -> CParser TokenWSBasic (𝐿 Exp)
forall t a. Ord t => CParser t () -> CParser t a -> CParser t (𝐿 a)
cpManySepBy CParser TokenWSBasic ()
cpDelimWS CParser TokenWSBasic Exp
cpExp

testParserSuccess  IO ()
testParserSuccess :: IO ()
testParserSuccess = do
  CParser TokenWSBasic (𝐿 Exp)
-> Text -> 𝕍 (ParserToken TokenWSBasic) -> IO ()
forall a t ts.
(Pretty a, ToIter (ParserToken t) ts, Ord t) =>
CParser t a -> Text -> ts -> IO ()
parseIOMain CParser TokenWSBasic (𝐿 Exp)
cpExpList Text
""
    (𝕍 (ParserToken TokenWSBasic) -> IO ())
-> IO (𝕍 (ParserToken TokenWSBasic)) -> IO ()
forall (m :: * -> *) a b. Bind m => (a -> m b) -> m a -> m b
*$ Lexer CharClass ℂ TokenClassWSBasic ℕ64 TokenWSBasic
-> Text
-> (𝕍 (PreParserToken TokenWSBasic)
    -> 𝕍 (PreParserToken TokenWSBasic))
-> 𝕍 (ParserToken ℂ)
-> IO (𝕍 (ParserToken TokenWSBasic))
forall c t o u w w'.
(Show u, Ord c, Ord t, Pretty t, Classified c t, Eq o, Eq u,
 Plus u) =>
Lexer c t o u w
-> Text
-> (𝕍 (PreParserToken w) -> 𝕍 (PreParserToken w'))
-> 𝕍 (ParserToken t)
-> IO (𝕍 (ParserToken w'))
tokenizeFIO Lexer CharClass ℂ TokenClassWSBasic ℕ64 TokenWSBasic
lexer Text
""  𝕍 (PreParserToken TokenWSBasic) -> 𝕍 (PreParserToken TokenWSBasic)
blockifyTokensWSBasic
     (𝕍 (ParserToken ℂ) -> IO (𝕍 (ParserToken TokenWSBasic)))
-> 𝕍 (ParserToken ℂ) -> IO (𝕍 (ParserToken TokenWSBasic))
forall a b. (a -> b) -> a -> b
$ Text -> 𝕍 (ParserToken ℂ)
tokens
     (Text -> 𝕍 (ParserToken ℂ)) -> Text -> 𝕍 (ParserToken ℂ)
forall a b. (a -> b) -> a -> b
$ 𝐼 Text -> Text
forall a t. (Monoid a, ToIter a t) => t -> a
concat
     (𝐼 Text -> Text) -> 𝐼 Text -> Text
forall a b. (a -> b) -> a -> b
$ Text -> [Text] -> 𝐼 Text
forall a t. ToIter a t => a -> t -> 𝐼 a
inbetween Text
"\n"
    [ Text
"(- 1) + 2"
    , Text
"local 2 + 3"
    , Text
"      local - 2 + 3"
    , Text
"        * 4 ^ 5 ^ 6 !"
    ]

testParserFailure  IO ()
testParserFailure :: IO ()
testParserFailure =
  CParser TokenWSBasic (𝐿 Exp)
-> Text -> 𝕍 (ParserToken TokenWSBasic) -> IO ()
forall a t ts.
(Pretty a, ToIter (ParserToken t) ts, Ord t) =>
CParser t a -> Text -> ts -> IO ()
parseIOMain CParser TokenWSBasic (𝐿 Exp)
cpExpList Text
""
    (𝕍 (ParserToken TokenWSBasic) -> IO ())
-> IO (𝕍 (ParserToken TokenWSBasic)) -> IO ()
forall (m :: * -> *) a b. Bind m => (a -> m b) -> m a -> m b
*$ Lexer CharClass ℂ TokenClassWSBasic ℕ64 TokenWSBasic
-> Text
-> (𝕍 (PreParserToken TokenWSBasic)
    -> 𝕍 (PreParserToken TokenWSBasic))
-> 𝕍 (ParserToken ℂ)
-> IO (𝕍 (ParserToken TokenWSBasic))
forall c t o u w w'.
(Show u, Ord c, Ord t, Pretty t, Classified c t, Eq o, Eq u,
 Plus u) =>
Lexer c t o u w
-> Text
-> (𝕍 (PreParserToken w) -> 𝕍 (PreParserToken w'))
-> 𝕍 (ParserToken t)
-> IO (𝕍 (ParserToken w'))
tokenizeFIO Lexer CharClass ℂ TokenClassWSBasic ℕ64 TokenWSBasic
lexer Text
"" 𝕍 (PreParserToken TokenWSBasic) -> 𝕍 (PreParserToken TokenWSBasic)
blockifyTokensWSBasic
     (𝕍 (ParserToken ℂ) -> IO (𝕍 (ParserToken TokenWSBasic)))
-> 𝕍 (ParserToken ℂ) -> IO (𝕍 (ParserToken TokenWSBasic))
forall a b. (a -> b) -> a -> b
$ Text -> 𝕍 (ParserToken ℂ)
tokens
     (Text -> 𝕍 (ParserToken ℂ)) -> Text -> 𝕍 (ParserToken ℂ)
forall a b. (a -> b) -> a -> b
$ 𝐼 Text -> Text
forall a t. (Monoid a, ToIter a t) => t -> a
concat
     (𝐼 Text -> Text) -> 𝐼 Text -> Text
forall a b. (a -> b) -> a -> b
$ Text -> [Text] -> 𝐼 Text
forall a t. ToIter a t => a -> t -> 𝐼 a
inbetween Text
"\n"
    [ Text
"(- 1) + 2"
    , Text
"local 2 + 3 + 4"
    , Text
"      local - 2 + 3"
    , Text
"      + 4 ^ 5 ^ 6 !"
    ]