language-ocaml-0.1.31: lib/Language/OCaml/Parser/ConstructorDeclaration.hs
{-# LANGUAGE DisambiguateRecordFields #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
module Language.OCaml.Parser.ConstructorDeclaration
( constructorDeclarationP
) where
import Data.Default
import Language.OCaml.Definitions.Parsing.ASTHelper.Type as Type
import Language.OCaml.Definitions.Parsing.ParseTree
import Language.OCaml.Parser.Attributes
import Language.OCaml.Parser.Common
import Language.OCaml.Parser.ConstrIdent
import Language.OCaml.Parser.GeneralizedConstructorArguments
import Language.OCaml.Parser.Utils.Types
constructorDeclarationP ::
Parser Structure -> Parser CoreType -> Parser ConstructorDeclaration
constructorDeclarationP structureP coreTypeP = do
name <- constrIdentP
(args, res) <- generalizedConstructorArgumentsP coreTypeP
attrs <- attributesP structureP
return $ Type.constructor (def { args, attrs }) res (mkRHS name (1 :: Int))