packages feed

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

module Language.OCaml.Parser.TypeDeclarations
  ( typeDeclarationsP
  ) where

import qualified Language.OCaml.Definitions.Parsing.ASTTypes  as ASTTypes
import           Language.OCaml.Definitions.Parsing.ParseTree
import           Language.OCaml.Parser.AndTypeDeclaration
import           Language.OCaml.Parser.TypeDeclaration
import           Language.OCaml.Parser.Utils.Combinators
import           Language.OCaml.Parser.Utils.Types

typeDeclarationsP ::
  Parser Structure -> Parser (ASTTypes.RecFlag, [TypeDeclaration])
typeDeclarationsP structureP = leftRecursive
  [ do
    (nonrecFlag, ty) <- typeDeclarationP'
    return $ (nonrecFlag, [ty])
  ]
  [ do
    ty <- andTypeDeclarationP'
    return $ \ (nonrecFlag, tys) -> (nonrecFlag, ty : tys)
  ]
  where
    typeDeclarationP' = typeDeclarationP structureP
    andTypeDeclarationP' = andTypeDeclarationP structureP