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


-- | A Haskell 98 logically uninhabited data type
--   
--   A Haskell 98 logically uninhabited data type, used to indicate that a
--   given term should not exist.
@package void
@version 0.6.1


module Data.Void

-- | A logically uninhabited data type.
data Void

-- | Since <a>Void</a> values logically don't exist, this witnesses the
--   logical reasoning tool of "ex falso quodlibet".
absurd :: Void -> a

-- | If <a>Void</a> is uninhabited then any <a>Functor</a> that holds only
--   values of type <a>Void</a> is holding no values.
vacuous :: Functor f => f Void -> f a

-- | If <a>Void</a> is uninhabited then any <a>Monad</a> that holds values
--   of type <a>Void</a> is holding no values.
vacuousM :: Monad m => m Void -> m a
instance Typeable Void
instance Generic Void
instance Data Void
instance Datatype D1Void
instance Constructor C1_0Void
instance Exception Void
instance Ix Void
instance Semigroup Void
instance Read Void
instance Show Void
instance Ord Void
instance Hashable Void
instance Eq Void


module Data.Void.Unsafe

-- | If <a>Void</a> is uninhabited than any <a>Functor</a> that holds only
--   values of the type <a>Void</a> is holding no values.
--   
--   This is only safe for valid functors that do not perform GADT-like
--   analysis on the argument.
unsafeVacuous :: Functor f => f Void -> f a

-- | If <a>Void</a> is uninhabited then any <a>Monad</a> that holds values
--   of type <a>Void</a> is holding no values.
--   
--   This is only safe for valid monads that do not perform GADT-like
--   analysis on the argument.
unsafeVacuousM :: Monad m => m Void -> m a
