{-# LANGUAGE NoImplicitPrelude #-}

module Psi.Bool (
    (\/)
  , (/\)
  ) where

import           Control.Applicative (Applicative, liftA2)

import           Data.Bool (Bool, (&&), (||))

-- | Logical conjunction.
(/\) :: Applicative f => f Bool -> f Bool -> f Bool
/\ :: forall (f :: * -> *). Applicative f => f Bool -> f Bool -> f Bool
(/\) = (Bool -> Bool -> Bool) -> f Bool -> f Bool -> f Bool
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 Bool -> Bool -> Bool
(&&)

-- | Logical disjunction.
(\/) :: Applicative f => f Bool -> f Bool -> f Bool
\/ :: forall (f :: * -> *). Applicative f => f Bool -> f Bool -> f Bool
(\/) = (Bool -> Bool -> Bool) -> f Bool -> f Bool -> f Bool
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 Bool -> Bool -> Bool
(||)

infixl 8 /\, \/