module Data.Empty where { import Data.Countable; import Data.Searchable; class (Finite n) => Empty n where { never :: n -> a; }; instance (Empty a,Empty b) => Empty (Either a b) where { never (Left a) = never a; never (Right a) = never a; }; instance (Empty a,Finite b) => Empty (a,b) where { never (a,_) = never a; }; instance (AtLeastOneCountable a,Finite a,Empty b) => Empty (a -> b) where { never ab = never (ab countFirst); }; data None; instance Countable None where { countPrevious = never; countMaybeNext Nothing = Nothing; countMaybeNext (Just n) = never n; }; instance Searchable None where { search = finiteSearch; }; instance Finite None where { allValues = []; assemble _ = pure never; }; instance Empty None where { never a = case a of {}; }; instance Eq None where { a == _b = never a; }; instance Ord None where { a <= _b = never a; }; instance Show None where { show a = never a; }; }