packages feed

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

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

module Language.OCaml.Definitions.Parsing.ASTHelper.Mty
  ( MkOpts(..)
  , attr
  , extension
  , ident
  , 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.ParseTree        as ParseTree
import Language.OCaml.Definitions.Parsing.Location

attr :: ModuleType -> Attribute -> ModuleType
attr d a = d { pmtyAttributes = pmtyAttributes d ++ [a] }

mk :: MkOpts -> ModuleTypeDesc -> ModuleType
mk (MkOpts {..}) desc =
  ModuleType
  { pmtyDesc       = desc
  , pmtyLoc        = loc
  , pmtyAttributes = attrs
  }

data MkOpts = MkOpts
  { attrs  :: [Attribute]
  , loc    :: Location
  }

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

ident :: MkOpts -> Loc Longident -> ModuleType
ident (MkOpts {..}) a = mk (def { loc, attrs }) $ PmtyIdent a

extension :: MkOpts -> Extension -> ModuleType
extension (MkOpts {..}) a = mk (def { loc, attrs }) $ PmtyExtension a