packages feed

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

module Language.OCaml.Parser.StructureItem
  ( structureItemP
  ) where

import Text.Megaparsec

import Language.OCaml.Definitions.Parsing.ParseTree
import Language.OCaml.Parser.Common
import Language.OCaml.Parser.LetBindings
import Language.OCaml.Parser.ModuleBinding
import Language.OCaml.Parser.OpenStatement
import Language.OCaml.Parser.SeqExpr
import Language.OCaml.Parser.StrExceptionDeclaration
import Language.OCaml.Parser.TypeDeclarations
import Language.OCaml.Parser.Utils.Types

structureItemP :: Parser Structure -> Parser StructureItem
structureItemP structureP = choice
  [ valOfLetBindings <$> letBindingsP structureP (seqExprP structureP)
  , do
    (nr, l) <- typeDeclarationsP structureP
    return $ mkstrExt (PstrType nr (reverse l)) Nothing -- FIXME: not Nothing
  , do
    (l, _ext) <- strExceptionDeclarationP structureP
    return $ mkstrExt (PstrException l) Nothing -- FIXME
  , do
    (body, _ext) <- openStatementP structureP
    return $ mkstrExt (PstrOpen body) Nothing -- FIXME
  , do
    (body, _ext) <- moduleBindingP structureP
    return $ mkstrExt (PstrModule body) Nothing -- FIXME
  ]