30 lines
623 B
Haskell
30 lines
623 B
Haskell
module Mima.Parse.Lexeme
|
|
( space
|
|
, lexeme
|
|
, symbol
|
|
, lNewline
|
|
, lNewlines
|
|
) where
|
|
|
|
import Control.Monad
|
|
import qualified Data.Text as T
|
|
import Text.Megaparsec
|
|
import qualified Text.Megaparsec.Char as C
|
|
import qualified Text.Megaparsec.Char.Lexer as L
|
|
|
|
import Mima.Parse.Common
|
|
|
|
space :: Parser ()
|
|
space = L.space (void whitespace) empty empty
|
|
|
|
lexeme :: Parser a -> Parser a
|
|
lexeme = L.lexeme space
|
|
|
|
symbol :: T.Text -> Parser T.Text
|
|
symbol = L.symbol space
|
|
|
|
lNewline :: Parser ()
|
|
lNewline = void $ lexeme C.newline
|
|
|
|
lNewlines :: Parser ()
|
|
lNewlines = void (some lNewline) <|> eof
|