{-# LANGUAGE NoImplicitPrelude, UnicodeSyntax #-}

module Data.Bool.Unicode ( (∧), (∨), (¬), (⊻), (⊼), (⊽) ) where

-------------------------------------------------------------------------------
-- Imports
-------------------------------------------------------------------------------

-- from base:
import Data.Bool ( Bool, (&&), (||), not )

-------------------------------------------------------------------------------
-- Fixities
-------------------------------------------------------------------------------

infixr 2 
infixr 3 
infixr 3 
infixr 3 
infixr 3 


-------------------------------------------------------------------------------
-- Symbols
-------------------------------------------------------------------------------

{-|
(¬) = 'not'

U+00AC, NOT SIGN
-}
(¬)  Bool  Bool
¬ :: Bool -> Bool
(¬) = Bool -> Bool
not
{-# INLINE (¬) #-}

{-|
(∧) = ('&&')

U+2227, LOGICAL AND
-}
(∧)  Bool  Bool  Bool
∧ :: Bool -> Bool -> Bool
(∧) = Bool -> Bool -> Bool
(&&)
{-# INLINE () #-}

{-|
(∨) = ('||')

U+2228, LOGICAL OR
-}
(∨)  Bool  Bool  Bool
∨ :: Bool -> Bool -> Bool
(∨) = Bool -> Bool -> Bool
(||)
{-# INLINE () #-}

{-|
a ⊻ b = (a ∨ b) ∧ not (a ∧ b)

U+22BB, XOR
-}
(⊻)  Bool  Bool  Bool
Bool
a ⊻ :: Bool -> Bool -> Bool
 Bool
b = (Bool
a Bool -> Bool -> Bool
|| Bool
b) Bool -> Bool -> Bool
&& Bool -> Bool
not (Bool
a Bool -> Bool -> Bool
&& Bool
b)
{-# INLINE () #-}

{-|
a ⊼ b = not (a ∧ b)

U+22bc, NAND
-}
(⊼)  Bool  Bool  Bool
Bool
a ⊼ :: Bool -> Bool -> Bool
 Bool
b = Bool -> Bool
not (Bool
a Bool -> Bool -> Bool
&& Bool
b)
{-# INLINE () #-}

{-|
a ⊽ b = not (a ∨ b)

U+22bd, NOR
-}
(⊽)  Bool  Bool  Bool
Bool
a ⊽ :: Bool -> Bool -> Bool
 Bool
b = Bool -> Bool
not (Bool
a Bool -> Bool -> Bool
|| Bool
b)
{-# INLINE () #-}