packages feed

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

module Language.OCaml.Parser.LblPattern
  ( lblPatternP
  ) where

import Text.Megaparsec

import Language.OCaml.Definitions.Parsing.ASTTypes
import Language.OCaml.Definitions.Parsing.ParseTree
import Language.OCaml.Parser.Common
import Language.OCaml.Parser.LabelLongident
import Language.OCaml.Parser.OptPatternTypeConstraint
import Language.OCaml.Parser.Tokens
import Language.OCaml.Parser.Utils.Types

lblPatternP :: Parser Pattern -> Parser (Loc Longident, Pattern)
lblPatternP patternP = choice
  [ do
    (i, c) <- try $ do
      i <- labelLongidentP
      c <- optPatternTypeConstraintP
      equalT
      return (i, c)
    p <- patternP
    return (mkRHS i 1, mkpatOptConstraint p c)
  , do
    i <- labelLongidentP
    c <- optPatternTypeConstraintP
    return (mkRHS i 1, mkpatOptConstraint (patOfLabel i 1) c)
  ]