module Control.Applicative.Logic (any,or,all,and,(&&),convert,Searchable,search) where
import Control.Applicative
import Prelude hiding (any,all,and,or,(&&))
true :: (Applicative f, Monoid a) => f a
true :: forall (f :: * -> *) a. (Applicative f, Monoid a) => f a
true = a -> f a
forall a. a -> f a
forall (f :: * -> *) a. Applicative f => a -> f a
pure a
forall a. Monoid a => a
mempty
false :: (Alternative f) => f a
false :: forall (f :: * -> *) a. Alternative f => f a
false = f a
forall a. f a
forall (f :: * -> *) a. Alternative f => f a
empty
any :: (Alternative f, Foldable t) => (a -> f b) -> t a -> f b
any :: forall (f :: * -> *) (t :: * -> *) a b.
(Alternative f, Foldable t) =>
(a -> f b) -> t a -> f b
any = ((f b -> t a -> f b) -> f b -> t a -> f b
forall a b. (a -> b) -> a -> b
$ f b
forall (f :: * -> *) a. Alternative f => f a
false) ((f b -> t a -> f b) -> t a -> f b)
-> ((a -> f b) -> f b -> t a -> f b) -> (a -> f b) -> t a -> f b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a -> f b -> f b) -> f b -> t a -> f b
forall a b. (a -> b -> b) -> b -> t a -> b
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr ((a -> f b -> f b) -> f b -> t a -> f b)
-> ((a -> f b) -> a -> f b -> f b)
-> (a -> f b)
-> f b
-> t a
-> f b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (f b -> f b -> f b
forall a. f a -> f a -> f a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
(<|>) (f b -> f b -> f b) -> (a -> f b) -> a -> f b -> f b
forall b c a. (b -> c) -> (a -> b) -> a -> c
.)
all :: (Applicative f, Monoid b, Foldable t)
=> (a -> f b) -> t a -> f b
all :: forall (f :: * -> *) b (t :: * -> *) a.
(Applicative f, Monoid b, Foldable t) =>
(a -> f b) -> t a -> f b
all = ((f b -> t a -> f b) -> f b -> t a -> f b
forall a b. (a -> b) -> a -> b
$ f b
forall (f :: * -> *) a. (Applicative f, Monoid a) => f a
true) ((f b -> t a -> f b) -> t a -> f b)
-> ((a -> f b) -> f b -> t a -> f b) -> (a -> f b) -> t a -> f b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a -> f b -> f b) -> f b -> t a -> f b
forall a b. (a -> b -> b) -> b -> t a -> b
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr ((a -> f b -> f b) -> f b -> t a -> f b)
-> ((a -> f b) -> a -> f b -> f b)
-> (a -> f b)
-> f b
-> t a
-> f b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((b -> b -> b) -> f b -> f b -> f b
forall a b c. (a -> b -> c) -> f a -> f b -> f c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 b -> b -> b
forall a. Semigroup a => a -> a -> a
(<>) (f b -> f b -> f b) -> (a -> f b) -> a -> f b -> f b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>)
or :: (Alternative f, Foldable t)
=> t (f a) -> f a
or :: forall (f :: * -> *) (t :: * -> *) a.
(Alternative f, Foldable t) =>
t (f a) -> f a
or = (f a -> f a) -> t (f a) -> f a
forall (f :: * -> *) (t :: * -> *) a b.
(Alternative f, Foldable t) =>
(a -> f b) -> t a -> f b
any f a -> f a
forall a. a -> a
id
and :: (Applicative f, Monoid a, Foldable t)
=> t (f a) -> f a
and :: forall (f :: * -> *) a (t :: * -> *).
(Applicative f, Monoid a, Foldable t) =>
t (f a) -> f a
and = (f a -> f a) -> t (f a) -> f a
forall (f :: * -> *) b (t :: * -> *) a.
(Applicative f, Monoid b, Foldable t) =>
(a -> f b) -> t a -> f b
all f a -> f a
forall a. a -> a
id
(&&) :: (Applicative f, Monoid a)
=> f a -> f a -> f a
&& :: forall (f :: * -> *) a.
(Applicative f, Monoid a) =>
f a -> f a -> f a
(&&) = (a -> a -> a) -> f a -> f a -> f a
forall a b c. (a -> b -> c) -> f a -> f b -> f c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 a -> a -> a
forall a. Semigroup a => a -> a -> a
(<>)
convert :: (Alternative f, Foldable t)
=> t a -> f a
convert :: forall (f :: * -> *) (t :: * -> *) a.
(Alternative f, Foldable t) =>
t a -> f a
convert = (a -> f a) -> t a -> f a
forall (f :: * -> *) (t :: * -> *) a b.
(Alternative f, Foldable t) =>
(a -> f b) -> t a -> f b
any a -> f a
forall a. a -> f a
forall (f :: * -> *) a. Applicative f => a -> f a
pure
class (Foldable t) => Searchable t where
search :: (Alternative f, Monoid b) => (a -> f b) -> t a -> f b
instance Searchable Maybe where
search :: forall (f :: * -> *) b a.
(Alternative f, Monoid b) =>
(a -> f b) -> Maybe a -> f b
search = (a -> f b) -> Maybe a -> f b
forall (f :: * -> *) (t :: * -> *) a b.
(Alternative f, Foldable t) =>
(a -> f b) -> t a -> f b
any