{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE EmptyCase #-}
{-# LANGUAGE ExistentialQuantification #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE StandaloneKindSignatures #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE Trustworthy #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE UndecidableInstances #-}
module Data.Eliminator (
elimAll
, ElimAll
, elimAny
, ElimAny
, elimArg
, ElimArg
, elimBool
, ElimBool
, elimConst
, ElimConst
, elimDown
, ElimDown
, elimDual
, ElimDual
, elimEither
, ElimEither
, elimFirst
, ElimFirst
, elimIdentity
, ElimIdentity
, elimLast
, ElimLast
, elimList
, ElimList
, elimMax
, ElimMax
, elimMaybe
, ElimMaybe
, elimMin
, ElimMin
, elimNat
, ElimNat
, elimNonEmpty
, ElimNonEmpty
, elimOrdering
, ElimOrdering
, elimProduct
, ElimProduct
, elimSum
, ElimSum
, elimTuple0
, ElimTuple0
, elimTuple2
, ElimTuple2
, elimTuple3
, ElimTuple3
, elimTuple4
, ElimTuple4
, elimTuple5
, ElimTuple5
, elimTuple6
, ElimTuple6
, elimTuple7
, ElimTuple7
, elimVoid
, ElimVoid
, elimWrappedMonoid
, ElimWrappedMonoid
) where
import Control.Monad.Extra
import Data.Eliminator.TH
import Data.Functor.Const (Const(..))
import Data.Functor.Const.Singletons (SConst(..))
import Data.Functor.Identity (Identity(..))
import Data.Functor.Identity.Singletons (SIdentity(..))
import Data.List.NonEmpty (NonEmpty(..))
import Data.List.NonEmpty.Singletons (SNonEmpty(..))
import Data.Monoid hiding (First, Last)
import Data.Monoid.Singletons hiding (SFirst, SLast)
import Data.Nat
import Data.Ord (Down(..))
import Data.Ord.Singletons (SDown(..))
import Data.Semigroup
import Data.Semigroup.Singletons
import Data.Void (Void)
import Language.Haskell.TH (nameBase)
import Language.Haskell.TH.Desugar (tupleNameDegree_maybe)
import Prelude.Singletons hiding
(All, Any, Const, Last, Min, Max, Product, Sum)
$