defun-core-0.1: src/DeFun/Bool.hs
{-# LANGUAGE Trustworthy #-}
-- | Boolean functions.
--
-- Type families are defined in "Data.Type.Bool" module in @base@ package.
-- For term-level reflections see [defun-bool package](https://hackage.haskell.org/package/defun-bool).
--
module DeFun.Bool (
-- * Logical and
LAnd, LAndSym, LAndSym1,
-- * Logical or
LOr, LOrSym, LOrSym1,
-- * Logical not
Not, NotSym,
) where
import Data.Type.Bool (Not, type (&&), type (||))
import Prelude (Bool)
import DeFun.Core
-------------------------------------------------------------------------------
-- LAnd
-------------------------------------------------------------------------------
-- | Logical and. A synonym of 'Data.Type.Bool.&&'
type LAnd :: Bool -> Bool -> Bool
type LAnd x y = x && y
type LAndSym :: Bool ~> Bool ~> Bool
data LAndSym x
type instance App LAndSym x = LAndSym1 x
type LAndSym1 :: Bool -> Bool ~> Bool
data LAndSym1 x y
type instance App (LAndSym1 x) y = LAnd x y
-------------------------------------------------------------------------------
-- LOr
-------------------------------------------------------------------------------
-- | Logical or. A synonym of 'Data.Type.Bool.||'
type LOr :: Bool -> Bool -> Bool
type LOr x y = x || y
type LOrSym :: Bool ~> Bool ~> Bool
data LOrSym x
type instance App LOrSym x = LOrSym1 x
type LOrSym1 :: Bool -> Bool ~> Bool
data LOrSym1 x y
type instance App (LOrSym1 x) y = LOr x y
-------------------------------------------------------------------------------
-- Not
-------------------------------------------------------------------------------
-- | Logical not.
type NotSym :: Bool ~> Bool
data NotSym x
type instance App NotSym x = Not x