packages feed

language-ocaml-0.1.31: lib/Language/OCaml/Parser/SimpleDelimitedPattern.hs

module Language.OCaml.Parser.SimpleDelimitedPattern
  ( simpleDelimitedPatternP
  ) where

import Text.Megaparsec

import Language.OCaml.Definitions.Parsing.ParseTree
import Language.OCaml.Parser.Common
import Language.OCaml.Parser.LblPatternList
import Language.OCaml.Parser.OptSemi
import Language.OCaml.Parser.PatternSemiList
import Language.OCaml.Parser.Tokens
import Language.OCaml.Parser.Utils.Types

simpleDelimitedPatternP :: Parser Pattern -> Parser Pattern
simpleDelimitedPatternP patternP = choice
  [ do
    (fields, closed) <- try $ do
      lBraceT
      lblPatternListP patternP
    rBraceT
    return $ mkpat $ PpatRecord fields closed
  , do
    l <- try $ do
      lBracketT
      l <- patternSemiListP patternP
      optSemiP
      return l
    rBracketT
    return $ mktailpat (rhsLoc 4) (reverse l)
  , do
    l <- try $ do
      lBracketBarT
      l <- patternSemiListP'
      optSemiP
      return l
    barRBracketT
    return $ mkpat $ PpatArray (reverse l)
  , do
    lBracketBarT
    barRBracketT
    return $ mkpat $ PpatArray []
  ]
  where
    patternSemiListP' = patternSemiListP patternP