-- SPDX-FileCopyrightText: 2020 Tocqueville Group
--
-- SPDX-License-Identifier: LicenseRef-MIT-TQ

{-# LANGUAGE UndecidableSuperClasses #-}
{-# OPTIONS_GHC -Wno-redundant-constraints #-}

-- | Entrypoints utilities for Lorentz
module Lorentz.EntryPoints
  ( -- * Typeclasses
    EntryPointsDerivation (..)
  , ParameterHasEntryPoints (..)
  , ParameterDeclaresEntryPoints

    -- * Entrypoints API
  , AllParameterEntryPoints
  , LookupParameterEntryPoint
  , parameterEntryPointsToNotes
  , GetEntryPointArg
  , parameterEntryPointCall
  , GetDefaultEntryPointArg
  , parameterEntryPointCallDefault
  , ForbidExplicitDefaultEntryPoint
  , NoExplicitDefaultEntryPoint
  , sepcCallRootChecked
  , EntryPointRef (..)
  , eprName
  , GetEntryPointArgCustom
  , HasEntryPointArg (..)
  , HasDefEntryPointArg
  , HasEntryPointOfType
  , ParameterContainsEntryPoints
  , TrustEpName (..)
  , parameterEntryPointCallCustom
  , RequireAllUniqueEntryPoints
  , (:>)

    -- * Implementations
  , EpdNone
  , EpdPlain
  , EpdRecursive
  , EpdDelegate

    -- * Behaviour modifiers
  , ParameterWrapper (..)
  , ShouldHaveEntryPoints (..)
  ) where

import Lorentz.EntryPoints.Core
import Lorentz.EntryPoints.Helpers
import Lorentz.EntryPoints.Impl
import Lorentz.EntryPoints.Manual