-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Infinite search in finite time with Hilbert's epsilon -- -- Infinite search in finite time with Hilbert's epsilon @package search @version 0.2 module Data.Search.LazyBool -- | Bool with a lazier Ord as suggested here newtype B B :: Bool -> B instance GHC.Read.Read Data.Search.LazyBool.B instance GHC.Show.Show Data.Search.LazyBool.B instance GHC.Classes.Eq Data.Search.LazyBool.B instance GHC.Classes.Ord Data.Search.LazyBool.B module Data.Search.Intensional -- | Given a test that is required to execute in finite time for _all_ -- inputs, even infinite ones, Search should productively yield an -- answer. -- -- I currently also assume that comparison of scores can be done in -- finite time for all scores. -- -- This rules out large score sets. -- -- Search Bool can be used for predicate searches. newtype Search a b Search :: (forall m. Monad m => (b -> m a) -> m b) -> Search a b [optimumM] :: Search a b -> forall m. Monad m => (b -> m a) -> m b -- | Find the worst-scoring result of a search with monadic effects. pessimumM :: Monad m => Search (Down a) b -> (b -> m a) -> m b optimum :: Search a b -> (b -> a) -> b -- | Find the worst-scoring result of a search. pessimum :: Search (Down a) b -> (b -> a) -> b -- | What is the best score obtained by the search? optimalScore :: Search a b -> (b -> a) -> a -- | What is the worst score obtained by the search? pessimalScore :: Search (Down a) b -> (b -> a) -> a -- | Search is more powerful than Cont. -- -- This provides a canonical monad homomorphism into Cont. cps :: Search a b -> Cont a b union :: Ord a => Search a b -> Search a b -> Search a b pair :: Ord a => b -> b -> Search a b fromList :: Ord a => [b] -> Search a b -- | Hilbert's epsilon class Hilbert a b where epsilon = to <$> gepsilon epsilon :: Hilbert a b => Search a b epsilon :: (Hilbert a b, GHilbert a (Rep b), Generic b) => Search a b -- | search for an optimal answer using Hilbert's epsilon -- --
-- >>> best (>4) :: Int8 -- 5 --best :: Hilbert a b => (b -> a) -> b -- | What is the worst scoring answer by Hilbert's epsilon? worst :: Hilbert (Down a) b => (b -> a) -> b bestScore :: Hilbert a b => (b -> a) -> a worstScore :: Hilbert (Down a) b => (b -> a) -> a every :: forall b. Hilbert B b => (b -> Bool) -> Bool -- | does there exist an element satisfying the predicate? -- --
-- >>> exists (>(maxBound::Int8)) -- False --exists :: forall b. Hilbert B b => (b -> Bool) -> Bool instance Data.Profunctor.Unsafe.Profunctor Data.Search.Intensional.Search instance GHC.Base.Functor (Data.Search.Intensional.Search a) instance Data.Functor.Bind.Class.Apply (Data.Search.Intensional.Search a) instance GHC.Base.Applicative (Data.Search.Intensional.Search a) instance GHC.Classes.Ord a => Data.Functor.Alt.Alt (Data.Search.Intensional.Search a) instance Data.Functor.Bind.Class.Bind (Data.Search.Intensional.Search a) instance GHC.Base.Monad (Data.Search.Intensional.Search a) instance Data.Search.Intensional.GHilbert a GHC.Generics.U1 instance (Data.Search.Intensional.GHilbert a f, Data.Search.Intensional.GHilbert a g) => Data.Search.Intensional.GHilbert a (f GHC.Generics.:*: g) instance (Data.Search.Intensional.GHilbert a f, Data.Search.Intensional.GHilbert a g, GHC.Classes.Ord a) => Data.Search.Intensional.GHilbert a (f GHC.Generics.:+: g) instance Data.Search.Intensional.Hilbert a b => Data.Search.Intensional.GHilbert a (GHC.Generics.K1 i b) instance Data.Search.Intensional.GHilbert a f => Data.Search.Intensional.GHilbert a (GHC.Generics.M1 i c f) instance Data.Search.Intensional.Hilbert x () instance Data.Search.Intensional.Hilbert x (Data.Proxy.Proxy a) instance Data.Search.Intensional.Hilbert x a => Data.Search.Intensional.Hilbert x (Data.Tagged.Tagged s a) instance (Data.Search.Intensional.Hilbert x a, Data.Search.Intensional.Hilbert x b) => Data.Search.Intensional.Hilbert x (a, b) instance (Data.Search.Intensional.Hilbert x a, Data.Search.Intensional.Hilbert x b, Data.Search.Intensional.Hilbert x c) => Data.Search.Intensional.Hilbert x (a, b, c) instance (Data.Search.Intensional.Hilbert x a, Data.Search.Intensional.Hilbert x b, Data.Search.Intensional.Hilbert x c, Data.Search.Intensional.Hilbert x d) => Data.Search.Intensional.Hilbert x (a, b, c, d) instance (Data.Search.Intensional.Hilbert x a, Data.Search.Intensional.Hilbert x b, Data.Search.Intensional.Hilbert x c, Data.Search.Intensional.Hilbert x d, Data.Search.Intensional.Hilbert x e) => Data.Search.Intensional.Hilbert x (a, b, c, d, e) instance GHC.Classes.Ord x => Data.Search.Intensional.Hilbert x GHC.Types.Bool instance GHC.Classes.Ord x => Data.Search.Intensional.Hilbert x Data.Monoid.Any instance GHC.Classes.Ord x => Data.Search.Intensional.Hilbert x Data.Monoid.All instance Data.Search.Intensional.Hilbert x a => Data.Search.Intensional.Hilbert x (Data.Monoid.Product a) instance Data.Search.Intensional.Hilbert x a => Data.Search.Intensional.Hilbert x (Data.Monoid.Sum a) instance GHC.Classes.Ord x => Data.Search.Intensional.Hilbert x GHC.Types.Ordering instance GHC.Classes.Ord x => Data.Search.Intensional.Hilbert x GHC.Types.Char instance GHC.Classes.Ord x => Data.Search.Intensional.Hilbert x GHC.Int.Int8 instance GHC.Classes.Ord x => Data.Search.Intensional.Hilbert x GHC.Int.Int16 instance GHC.Classes.Ord x => Data.Search.Intensional.Hilbert x GHC.Word.Word8 instance GHC.Classes.Ord x => Data.Search.Intensional.Hilbert x GHC.Word.Word16 instance (GHC.Classes.Ord x, Data.Search.Intensional.Hilbert x a) => Data.Search.Intensional.Hilbert x [a] instance (GHC.Classes.Ord x, Data.Search.Intensional.Hilbert x a) => Data.Search.Intensional.Hilbert x (Control.Applicative.ZipList a) instance (GHC.Classes.Ord x, Data.Search.Intensional.Hilbert x a) => Data.Search.Intensional.Hilbert x (GHC.Base.Maybe a) instance (GHC.Classes.Ord x, Data.Search.Intensional.Hilbert x a) => Data.Search.Intensional.Hilbert x (Data.Monoid.First a) instance (GHC.Classes.Ord x, Data.Search.Intensional.Hilbert x a) => Data.Search.Intensional.Hilbert x (Data.Monoid.Last a) instance (GHC.Classes.Ord x, Data.Search.Intensional.Hilbert x a, Data.Search.Intensional.Hilbert x b) => Data.Search.Intensional.Hilbert x (Data.Either.Either a b) instance (GHC.Classes.Ord x, GHC.Classes.Ord a, Data.Search.Intensional.Hilbert x b) => Data.Search.Intensional.Hilbert x (Data.Search.Intensional.Search a b) module Data.Search -- | Given a test that is required to execute in finite time for _all_ -- inputs, even infinite ones, Search should productively yield an -- answer. -- -- I currently also assume that comparison of scores can be done in -- finite time for all scores. -- -- This rules out large score sets. -- -- Search Bool can be used for predicate searches. newtype Search a b Search :: ((b -> a) -> b) -> Search a b [optimum] :: Search a b -> (b -> a) -> b -- | Find the worst-scoring result of a search. pessimum :: Search (Down a) b -> (b -> a) -> b -- | What is the best score obtained by the search? optimalScore :: Search a b -> (b -> a) -> a -- | What is the worst score obtained by the search? pessimalScore :: Search (Down a) b -> (b -> a) -> a -- | Search is more powerful than Cont. -- -- This provides a canonical monad homomorphism into Cont. cps :: Search a b -> Cont a b union :: Ord a => Search a b -> Search a b -> Search a b pair :: Ord a => b -> b -> Search a b fromList :: Ord a => [b] -> Search a b -- | Hilbert's epsilon class Hilbert a b where epsilon = to <$> gepsilon epsilon :: Hilbert a b => Search a b epsilon :: (Hilbert a b, GHilbert a (Rep b), Generic b) => Search a b -- | search for an optimal answer using Hilbert's epsilon -- --
-- >>> best (>4) :: Int8 -- 5 --best :: Hilbert a b => (b -> a) -> b -- | What is the worst scoring answer by Hilbert's epsilon? worst :: Hilbert (Down a) b => (b -> a) -> b bestScore :: Hilbert a b => (b -> a) -> a worstScore :: Hilbert (Down a) b => (b -> a) -> a -- | Bool with a lazier Ord as suggested here newtype B B :: Bool -> B every :: forall b. Hilbert B b => (b -> Bool) -> Bool -- | does there exist an element satisfying the predicate? -- --
-- >>> exists (>(maxBound::Int8)) -- False --exists :: forall b. Hilbert B b => (b -> Bool) -> Bool instance Data.Profunctor.Unsafe.Profunctor Data.Search.Search instance GHC.Base.Functor (Data.Search.Search a) instance Data.Functor.Bind.Class.Apply (Data.Search.Search a) instance GHC.Base.Applicative (Data.Search.Search a) instance GHC.Classes.Ord a => Data.Functor.Alt.Alt (Data.Search.Search a) instance Data.Functor.Bind.Class.Bind (Data.Search.Search a) instance GHC.Base.Monad (Data.Search.Search a) instance Data.Search.GHilbert a GHC.Generics.U1 instance (Data.Search.GHilbert a f, Data.Search.GHilbert a g) => Data.Search.GHilbert a (f GHC.Generics.:*: g) instance (Data.Search.GHilbert a f, Data.Search.GHilbert a g, GHC.Classes.Ord a) => Data.Search.GHilbert a (f GHC.Generics.:+: g) instance Data.Search.Hilbert a b => Data.Search.GHilbert a (GHC.Generics.K1 i b) instance Data.Search.GHilbert a f => Data.Search.GHilbert a (GHC.Generics.M1 i c f) instance Data.Search.Hilbert x () instance Data.Search.Hilbert x (Data.Proxy.Proxy a) instance Data.Search.Hilbert x a => Data.Search.Hilbert x (Data.Tagged.Tagged s a) instance (Data.Search.Hilbert x a, Data.Search.Hilbert x b) => Data.Search.Hilbert x (a, b) instance (Data.Search.Hilbert x a, Data.Search.Hilbert x b, Data.Search.Hilbert x c) => Data.Search.Hilbert x (a, b, c) instance (Data.Search.Hilbert x a, Data.Search.Hilbert x b, Data.Search.Hilbert x c, Data.Search.Hilbert x d) => Data.Search.Hilbert x (a, b, c, d) instance (Data.Search.Hilbert x a, Data.Search.Hilbert x b, Data.Search.Hilbert x c, Data.Search.Hilbert x d, Data.Search.Hilbert x e) => Data.Search.Hilbert x (a, b, c, d, e) instance GHC.Classes.Ord x => Data.Search.Hilbert x GHC.Types.Bool instance GHC.Classes.Ord x => Data.Search.Hilbert x Data.Monoid.Any instance GHC.Classes.Ord x => Data.Search.Hilbert x Data.Monoid.All instance Data.Search.Hilbert x a => Data.Search.Hilbert x (Data.Monoid.Product a) instance Data.Search.Hilbert x a => Data.Search.Hilbert x (Data.Monoid.Sum a) instance GHC.Classes.Ord x => Data.Search.Hilbert x GHC.Types.Ordering instance GHC.Classes.Ord x => Data.Search.Hilbert x GHC.Types.Char instance GHC.Classes.Ord x => Data.Search.Hilbert x GHC.Int.Int8 instance GHC.Classes.Ord x => Data.Search.Hilbert x GHC.Int.Int16 instance GHC.Classes.Ord x => Data.Search.Hilbert x GHC.Word.Word8 instance GHC.Classes.Ord x => Data.Search.Hilbert x GHC.Word.Word16 instance (GHC.Classes.Ord x, Data.Search.Hilbert x a) => Data.Search.Hilbert x [a] instance (GHC.Classes.Ord x, Data.Search.Hilbert x a) => Data.Search.Hilbert x (Control.Applicative.ZipList a) instance (GHC.Classes.Ord x, Data.Search.Hilbert x a) => Data.Search.Hilbert x (GHC.Base.Maybe a) instance (GHC.Classes.Ord x, Data.Search.Hilbert x a) => Data.Search.Hilbert x (Data.Monoid.First a) instance (GHC.Classes.Ord x, Data.Search.Hilbert x a) => Data.Search.Hilbert x (Data.Monoid.Last a) instance (GHC.Classes.Ord x, Data.Search.Hilbert x a, Data.Search.Hilbert x b) => Data.Search.Hilbert x (Data.Either.Either a b) instance (GHC.Classes.Ord x, GHC.Classes.Ord a, Data.Search.Hilbert x b) => Data.Search.Hilbert x (Data.Search.Search a b)