-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Countable, Searchable, Finite, Empty classes
--
--
-- - class Countable, for countable types
-- - class AtLeastOneCountable, for countable types that have
-- at least one value
-- - class InfiniteCountable, for infinite countable
-- types
-- - class Searchable, for types that can be searched over.
-- This turns out to include some infinite types, see
-- http://math.andrej.com/2007/09/28/seemingly-impossible-functional-programs/.
-- - class Finite, for finite types
-- - class Empty, for empty types
-- - data Nothing, an empty type
--
--
-- Some orphan instances:
--
--
-- - (Searchable a,Eq b) => Eq (a -> b)
-- - (Finite t) => Foldable ((->) t)
-- - (Finite a) => Traversable ((->) a)
-- - (Show a,Finite a,Show b) => Show (a -> b)
--
--
@package countable
@version 1.0
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)
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 ()
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 GHC.Integer.Type.Integer
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.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.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.Countable a => Data.Countable.Countable [a]
instance Data.Countable.Countable a => Data.Countable.AtLeastOneCountable [a]
instance Data.Countable.AtLeastOneCountable a => Data.Countable.InfiniteCountable [a]
-- | This module also includes these orphan instances:
--
--
module Data.Searchable
-- | It turns out there are Searchable instances that are not
-- Finite. The (c -> s) instance is based on the
-- algorithm at
-- http://math.andrej.com/2007/09/28/seemingly-impossible-functional-programs/.
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 where assemble afb = fmap listLookup (traverse (\ a -> fmap (\ b -> (a, b)) (afb a)) allValues) where listLookup [] _ = error "missing value" listLookup ((a, b) : _) a' | a == a' = b listLookup (_ : l) a' = listLookup l 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.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.Finite t => Data.Foldable.Foldable ((->) t)
instance Data.Searchable.Finite a => Data.Traversable.Traversable ((->) a)
instance Data.Searchable.Searchable ()
instance Data.Searchable.Finite ()
instance Data.Searchable.Searchable GHC.Types.Bool
instance Data.Searchable.Finite GHC.Types.Bool
instance Data.Searchable.Searchable GHC.Word.Word8
instance Data.Searchable.Finite GHC.Word.Word8
instance Data.Searchable.Searchable GHC.Word.Word16
instance Data.Searchable.Finite GHC.Word.Word16
instance Data.Searchable.Searchable GHC.Word.Word32
instance Data.Searchable.Finite GHC.Word.Word32
instance Data.Searchable.Searchable GHC.Word.Word64
instance Data.Searchable.Finite GHC.Word.Word64
instance Data.Searchable.Searchable GHC.Int.Int8
instance Data.Searchable.Finite GHC.Int.Int8
instance Data.Searchable.Searchable GHC.Int.Int16
instance Data.Searchable.Finite GHC.Int.Int16
instance Data.Searchable.Searchable GHC.Int.Int32
instance Data.Searchable.Finite GHC.Int.Int32
instance Data.Searchable.Searchable GHC.Int.Int64
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.Countable b) => Data.Countable.Countable (a -> b)
instance (Data.Searchable.Finite a, Data.Countable.AtLeastOneCountable b) => Data.Countable.AtLeastOneCountable (a -> b)
instance (Data.Searchable.Finite a, Data.Countable.AtLeastOneCountable a, Data.Countable.InfiniteCountable b) => Data.Countable.InfiniteCountable (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)
module Data.Empty
class (Finite n) => Empty n
never :: Empty n => n -> a
data 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)
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