packages feed

language-ocaml-0.1.31: lib/Language/OCaml/Definitions/Parsing/ASTHelper/Mtd.hs

{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE RecordWildCards #-}

module Language.OCaml.Definitions.Parsing.ASTHelper.Mtd
  ( MkOpts(..)
  , mk
  ) where

import Data.Default
import Prelude                                             hiding (sequence)

import Language.OCaml.Definitions.Parsing.ASTHelper.Common
import Language.OCaml.Definitions.Parsing.ASTTypes
import Language.OCaml.Definitions.Parsing.Docstrings
import Language.OCaml.Definitions.Parsing.ParseTree        as ParseTree
import Language.OCaml.Definitions.Parsing.Location

mk :: MkOpts -> Maybe ModuleType -> Loc String -> ModuleTypeDeclaration
mk (MkOpts {..}) typ name =
  ModuleTypeDeclaration
  { pmtdName       = name
  , pmtdType       = typ
  , pmtdAttributes = addTextAttrs text $ addDocsAttrs docs $ attrs
  , pmtdLoc        = loc
  }

data MkOpts = MkOpts
  { attrs  :: [Attribute]
  , docs   :: Docs
  , loc    :: Location
  , text   :: Text
  }

instance Default MkOpts where
  def = MkOpts
    { attrs = []
    , docs  = emptyDocs
    , loc   = defaultLoc
    , text  = []
    }