packages feed

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

module Language.OCaml.Parser.TypeConstraint
  ( typeConstraintP
  ) where

import Text.Megaparsec

import Language.OCaml.Definitions.Parsing.ParseTree
import Language.OCaml.Parser.CoreType
import Language.OCaml.Parser.Tokens
import Language.OCaml.Parser.Utils.Types

typeConstraintP :: Parser (Maybe CoreType, Maybe CoreType)
typeConstraintP = choice
  [ do
    t1 <- try $ do
      colonT
      t1 <- coreTypeP
      colonGreaterT
      return t1
    t2 <- coreTypeP
    return (Just t1, Just t2)
  , try $ do
    colonT
    t <- coreTypeP
    return (Just t, Nothing)
  , do
    try $ colonGreaterT
    t <- coreTypeP
    return (Nothing, Just t)
  ]