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 !" ]