-- 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
  , EpdWithRoot

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

import Lorentz.Entrypoints.Core
import Lorentz.Entrypoints.Helpers
import Lorentz.Entrypoints.Impl
import Lorentz.Entrypoints.Manual