{-# LANGUAGE DeriveDataTypeable #-}{-# LANGUAGE DeriveGeneric #-}{-# LANGUAGE EmptyCase #-}{-# LANGUAGE EmptyDataDeriving #-}{-# LANGUAGE Safe #-}{-# LANGUAGE StandaloneDeriving #-}------------------------------------------------------------------------------- |-- Copyright : (C) 2008-2014 Edward Kmett-- License : BSD-style (see the file libraries/base/LICENSE)---- Maintainer : Edward Kmett <ekmett@gmail.com>-- Stability : provisional-- Portability : portable---- A logically uninhabited data type, used to indicate that a given-- term should not exist.---- @since 4.8.0.0----------------------------------------------------------------------------moduleData.Void(Void ,absurd ,vacuous )whereimportControl.Exception importData.Data importData.Ix importGHC.Generics importData.Semigroup (Semigroup (..),stimesIdempotent )-- | Uninhabited data type---- @since 4.8.0.0dataVoid deriving(Eq-- ^ @since 4.8.0.0,Data -- ^ @since 4.8.0.0,Generic -- ^ @since 4.8.0.0,Ord-- ^ @since 4.8.0.0,Read -- ^ Reading a 'Void' value is always a parse error, considering-- 'Void' as a data type with no constructors.---- @since 4.8.0.0,Show -- ^ @since 4.8.0.0)-- | @since 4.8.0.0instanceIx Void whererange _=[]index _=absurd inRange _=absurd rangeSize _=0-- | @since 4.8.0.0instanceException Void -- | @since 4.9.0.0instanceSemigroup Void wherea <> _=a stimes =stimesIdempotent -- | Since 'Void' values logically don't exist, this witnesses the-- logical reasoning tool of \"ex falso quodlibet\".---- >>> let x :: Either Void Int; x = Right 5-- >>> :{-- case x of-- Right r -> r-- Left l -> absurd l-- :}-- 5---- @since 4.8.0.0absurd::Void ->a absurd a =casea of{}-- | If 'Void' is uninhabited then any 'Functor' that holds only-- values of type 'Void' is holding no values.---- @since 4.8.0.0vacuous::Functor f =>f Void ->f a vacuous =fmap absurd