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


-- | Countable, Searchable, Finite, Empty classes
--   
--   <ul>
--   <li><tt>class Countable</tt>, for countable types</li>
--   <li><tt>class AtLeastOneCountable</tt>, for countable types that have
--   at least one value</li>
--   <li><tt>class InfiniteCountable</tt>, for infinite countable
--   types</li>
--   <li><tt>class Searchable</tt>, for types that can be searched over.
--   This turns out to include some infinite types, see
--   <a>http://math.andrej.com/2007/09/28/seemingly-impossible-functional-programs/</a>.</li>
--   <li><tt>class Finite</tt>, for finite types</li>
--   <li><tt>class Empty</tt>, for empty types</li>
--   <li><tt>data Nothing</tt>, an empty type</li>
--   </ul>
--   
--   Some orphan instances:
--   
--   <ul>
--   <li><tt>(Searchable a,Eq b) =&gt; Eq (a -&gt; b)</tt> <i> </i></li>
--   <li><tt>(Finite t) =&gt; Foldable ((-&gt;) t)</tt> <i> </i></li>
--   <li><tt>(Finite a) =&gt; Traversable ((-&gt;) a)</tt> <i> </i></li>
--   <li><tt>(Show a,Finite a,Show b) =&gt; Show (a -&gt; b)</tt> <i>
--   </i></li>
--   </ul>
@package countable
@version 1.0

module Data.Countable
class (Eq a) => Countable a
countPrevious :: Countable a => a -> Maybe a
countMaybeNext :: Countable a => Maybe a -> Maybe a
countDown :: (Countable a) => a -> [a]
boundedCountPrevious :: (Eq a, Bounded a, Enum a) => a -> Maybe a
boundedCountMaybeNext :: (Eq a, Bounded a, Enum a) => Maybe a -> Maybe a
maybeRecount :: (Countable a, Countable b) => a -> Maybe b
countDownUp :: (Countable down, Countable up) => (down, up) -> Maybe (down, up)
countUpDown :: (Countable up, Countable down) => (up, down) -> Maybe (up, down)
finalIteration :: (a -> Maybe a) -> a -> a
class (Countable a) => AtLeastOneCountable a
countFirst :: AtLeastOneCountable a => a
class (AtLeastOneCountable a) => InfiniteCountable a
countNext :: InfiniteCountable a => Maybe a -> a
recount :: (Countable a, InfiniteCountable b) => a -> b
instance Data.Countable.Countable GHC.Integer.Type.Integer
instance Data.Countable.InfiniteCountable GHC.Integer.Type.Integer
instance Data.Countable.InfiniteCountable a => Data.Countable.InfiniteCountable (GHC.Base.Maybe a)
instance (Data.Countable.AtLeastOneCountable a, Data.Countable.InfiniteCountable b) => Data.Countable.InfiniteCountable (a, b)
instance (Data.Countable.Countable a, Data.Countable.InfiniteCountable b) => Data.Countable.InfiniteCountable (Data.Either.Either a b)
instance Data.Countable.AtLeastOneCountable a => Data.Countable.InfiniteCountable [a]
instance Data.Countable.AtLeastOneCountable ()
instance Data.Countable.AtLeastOneCountable GHC.Types.Bool
instance Data.Countable.AtLeastOneCountable GHC.Word.Word8
instance Data.Countable.AtLeastOneCountable GHC.Word.Word16
instance Data.Countable.AtLeastOneCountable GHC.Word.Word32
instance Data.Countable.AtLeastOneCountable GHC.Word.Word64
instance Data.Countable.AtLeastOneCountable GHC.Int.Int8
instance Data.Countable.AtLeastOneCountable GHC.Int.Int16
instance Data.Countable.AtLeastOneCountable GHC.Int.Int32
instance Data.Countable.AtLeastOneCountable GHC.Int.Int64
instance Data.Countable.AtLeastOneCountable GHC.Integer.Type.Integer
instance Data.Countable.Countable a => Data.Countable.AtLeastOneCountable (GHC.Base.Maybe a)
instance (Data.Countable.Countable a, Data.Countable.AtLeastOneCountable b) => Data.Countable.AtLeastOneCountable (Data.Either.Either a b)
instance (Data.Countable.AtLeastOneCountable a, Data.Countable.AtLeastOneCountable b) => Data.Countable.AtLeastOneCountable (a, b)
instance Data.Countable.Countable a => Data.Countable.AtLeastOneCountable [a]
instance Data.Countable.Countable ()
instance Data.Countable.Countable GHC.Types.Bool
instance Data.Countable.Countable GHC.Word.Word8
instance Data.Countable.Countable GHC.Word.Word16
instance Data.Countable.Countable GHC.Word.Word32
instance Data.Countable.Countable GHC.Word.Word64
instance Data.Countable.Countable GHC.Int.Int8
instance Data.Countable.Countable GHC.Int.Int16
instance Data.Countable.Countable GHC.Int.Int32
instance Data.Countable.Countable GHC.Int.Int64
instance Data.Countable.Countable a => Data.Countable.Countable (GHC.Base.Maybe a)
instance (Data.Countable.Countable a, Data.Countable.Countable b) => Data.Countable.Countable (Data.Either.Either a b)
instance (Data.Countable.Countable a, Data.Countable.Countable b) => Data.Countable.Countable (a, b)
instance Data.Countable.Countable a => Data.Countable.Countable [a]

module Data.Expression
data Expression a g f r
ClosedExpression :: (f r) -> Expression a g f r
OpenExpression :: a -> (Expression a g f (g r)) -> Expression a g f r
expressionSym :: a -> f (g r) -> Expression a g f r
runValueExpression :: (Functor f) => Expression a ((->) b) f r -> f ((a -> b) -> r)
runMatchExpression :: (Functor f) => Expression a ((,) b) f r -> f ([(a, b)], r)
instance (GHC.Base.Functor f, GHC.Base.Functor g) => GHC.Base.Functor (Data.Expression.Expression a g f)
instance (GHC.Base.Applicative f, GHC.Base.Functor g) => GHC.Base.Applicative (Data.Expression.Expression a g f)


-- | This module also includes these orphan instances:
--   
--   <ul>
--   <li><tt>(<a>Searchable</a> a,<a>Eq</a> b) =&gt; <a>Eq</a> (a -&gt;
--   b)</tt> <i> </i></li>
--   <li><tt>(<a>Finite</a> t) =&gt; <a>Foldable</a> ((-&gt;) t)</tt> <i>
--   </i></li>
--   <li><tt>(<a>Finite</a> a) =&gt; <a>Traversable</a> ((-&gt;) a)</tt>
--   <i> </i></li>
--   <li><tt>(<a>Show</a> a,<a>Finite</a> a,<a>Show</a> b) =&gt;
--   <a>Show</a> (a -&gt; b)</tt> <i> </i></li>
--   </ul>
module Data.Searchable

-- | It turns out there are <a>Searchable</a> instances that are not
--   <a>Finite</a>. The <tt>(c -&gt; s)</tt> instance is based on the
--   algorithm at
--   <a>http://math.andrej.com/2007/09/28/seemingly-impossible-functional-programs/</a>.
class Searchable a
search :: Searchable a => (a -> Maybe b) -> Maybe b
forsome :: (Searchable a) => (a -> Bool) -> Bool
forevery :: (Searchable a) => (a -> Bool) -> Bool
class (Searchable a, Countable a) => Finite a

-- | Not necessarily in counting order.
allValues :: Finite a => [a]
assemble :: forall b f. (Finite a, (Applicative f)) => (a -> f b) -> f (a -> b)
finiteSearch :: (Finite a) => (a -> Maybe b) -> Maybe b
finiteCountPrevious :: (Finite a) => a -> Maybe a
finiteCountMaybeNext :: (Finite a) => Maybe a -> Maybe a
instance (Data.Searchable.Finite a, Data.Countable.AtLeastOneCountable a, Data.Countable.InfiniteCountable b) => Data.Countable.InfiniteCountable (a -> b)
instance (Data.Searchable.Finite a, Data.Countable.Countable b) => Data.Countable.Countable (a -> b)
instance Data.Searchable.Finite t => Data.Foldable.Foldable ((->) t)
instance Data.Searchable.Finite a => Data.Traversable.Traversable ((->) a)
instance Data.Searchable.Finite ()
instance Data.Searchable.Finite GHC.Types.Bool
instance Data.Searchable.Finite GHC.Word.Word8
instance Data.Searchable.Finite GHC.Word.Word16
instance Data.Searchable.Finite GHC.Word.Word32
instance Data.Searchable.Finite GHC.Word.Word64
instance Data.Searchable.Finite GHC.Int.Int8
instance Data.Searchable.Finite GHC.Int.Int16
instance Data.Searchable.Finite GHC.Int.Int32
instance Data.Searchable.Finite GHC.Int.Int64
instance Data.Searchable.Finite a => Data.Searchable.Finite (GHC.Base.Maybe a)
instance (Data.Searchable.Finite a, Data.Searchable.Finite b) => Data.Searchable.Finite (Data.Either.Either a b)
instance (Data.Searchable.Finite a, Data.Searchable.Finite b) => Data.Searchable.Finite (a, b)
instance (Data.Searchable.Finite a, Data.Countable.AtLeastOneCountable b) => Data.Countable.AtLeastOneCountable (a -> b)
instance (Data.Searchable.Finite a, Data.Searchable.Finite b) => Data.Searchable.Finite (a -> b)
instance (GHC.Show.Show a, Data.Searchable.Finite a, GHC.Show.Show b) => GHC.Show.Show (a -> b)
instance Data.Searchable.Searchable a => Data.Searchable.Searchable (GHC.Base.Maybe a)
instance (Data.Searchable.Searchable a, Data.Searchable.Searchable b) => Data.Searchable.Searchable (Data.Either.Either a b)
instance (Data.Searchable.Searchable a, Data.Searchable.Searchable b) => Data.Searchable.Searchable (a, b)
instance (Data.Countable.Countable c, Data.Searchable.Searchable s) => Data.Searchable.Searchable (c -> s)
instance (Data.Searchable.Searchable a, GHC.Classes.Eq b) => GHC.Classes.Eq (a -> b)
instance Data.Searchable.Searchable ()
instance Data.Searchable.Searchable GHC.Types.Bool
instance Data.Searchable.Searchable GHC.Word.Word8
instance Data.Searchable.Searchable GHC.Word.Word16
instance Data.Searchable.Searchable GHC.Word.Word32
instance Data.Searchable.Searchable GHC.Word.Word64
instance Data.Searchable.Searchable GHC.Int.Int8
instance Data.Searchable.Searchable GHC.Int.Int16
instance Data.Searchable.Searchable GHC.Int.Int32
instance Data.Searchable.Searchable GHC.Int.Int64

module Data.Empty
class (Finite n) => Empty n
never :: Empty n => n -> a
data None
instance Data.Countable.Countable Data.Empty.None
instance Data.Searchable.Searchable Data.Empty.None
instance Data.Searchable.Finite Data.Empty.None
instance Data.Empty.Empty Data.Empty.None
instance GHC.Classes.Eq Data.Empty.None
instance GHC.Classes.Ord Data.Empty.None
instance GHC.Show.Show Data.Empty.None
instance (Data.Empty.Empty a, Data.Empty.Empty b) => Data.Empty.Empty (Data.Either.Either a b)
instance (Data.Empty.Empty a, Data.Searchable.Finite b) => Data.Empty.Empty (a, b)
instance (Data.Countable.AtLeastOneCountable a, Data.Searchable.Finite a, Data.Empty.Empty b) => Data.Empty.Empty (a -> b)
