{-# LANGUAGE DataKinds, GADTs, KindSignatures, TemplateHaskell, TypeFamilies #-}

{- | The goal of
the [singlethongs](https://hackage.haskell.org/package/singlethongs) library
is to offer the bare minimum of what
the [singletons](https://hackage.haskell.org/package/singletons) library offers
in a small package that's easy to compile across different GHC versions,
including GHCJS.

This module exports a minimal reproduction of what
the [singletons](https://hackage.haskell.org/package/singletons) package offers.
Namely 'Sing', 'SingI', 'SomeSing' and 'SingKind', as well as @TemplateHaskell@
support for generating the relevant instances for custom types. If there is
some feature that you thing could be added to this library,
please [suggest it](https://gitlab.com/k0001/singlethongs/issues).

The types exported by this module are not the same types as the types as the
one exported by
the [singletons](https://hackage.haskell.org/package/singletons) package.
Even if they have the same names and implementation, they are not seen as
equal by the type-checker. They are only intended to be a drop-in replacement.
-}
module Singlethongs
 ( Sing
 , SingI(..)
 , SomeSing(..)
 , withSomeSing
 , SingKind(..)
   -- * Template Haskell
 , singlethongs
   -- * Re-exports
 , TestEquality(testEquality)
 , (:~:)(Refl)
 ) where

import Singlethongs.Internal
import Singlethongs.TH
import Data.Type.Equality