language-ocaml-0.1.31: lib/Language/OCaml/Parser/LblExprList.hs
module Language.OCaml.Parser.LblExprList
( lblExprListP
) where
import Text.Megaparsec
import Language.OCaml.Definitions.Parsing.ASTTypes
import Language.OCaml.Definitions.Parsing.ParseTree
import Language.OCaml.Parser.LblExpr
import Language.OCaml.Parser.Tokens
import Language.OCaml.Parser.Utils.Types
-- FIXME: Right now, this is made to look like the OCaml parser, but we could
-- optimize everything by factoring out the left parsers that are the same.
lblExprListP :: Parser Expression -> Parser [(Loc Longident, Expression)]
lblExprListP exprP = choice
[ try $ do
e <- lblExprP'
semiT
l <- lblExprListP'
return $ e : l
, try $ do
e <- lblExprP'
semiT
return [e]
, (: []) <$> lblExprP'
]
where
lblExprP' = lblExprP exprP
lblExprListP' = lblExprListP exprP