-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Type level booleans
--   
--   Type level booleans.
--   
--   <tt>singletons</tt> package provides similar functionality, but it has
--   tight dependency constraints.
@package singleton-bool
@version 0.1.2.0

module Data.Singletons.Bool
data SBool (b :: Bool)
[STrue] :: SBool True
[SFalse] :: SBool False
class SBoolI (b :: Bool)
sbool :: SBoolI b => SBool b
sboolAnd :: SBool a -> SBool b -> SBool (a && b)
sboolOr :: SBool a -> SBool b -> SBool (a || b)
sboolNot :: SBool a -> SBool (Not a)

eqToRefl :: (a == b) ~ True => a :~: b

eqCast :: (a == b) ~ True => a -> b

-- | Useful combination of <a>sbool</a> and <a>eqToRefl</a>
sboolEqRefl :: forall (a :: k) (b :: k). SBoolI (a == b) => Maybe (a :~: b)

trivialRefl :: () :~: ()
instance Data.Singletons.Bool.SBoolI 'GHC.Types.True
instance Data.Singletons.Bool.SBoolI 'GHC.Types.False
