{-# OPTIONS --safe #-}
module Data.Bool where
open import Level
open import Agda.Builtin.Bool using (Bool; true; false) public
open import Data.Unit
open import Data.Empty
bool : ∀ {ℓ} {P : Bool → Type ℓ} (f : P false) (t : P true) (x : Bool) → P x
bool f t false = f
bool f t true = t
{-# INLINE bool #-}
bool′ : A → A → Bool → A
bool′ = bool
{-# INLINE bool′ #-}
infixr 0 if-syntax
if-syntax : Bool → A → A → A
if-syntax p t f = bool f t p
syntax if-syntax p t f = if p then t else f
! : Bool → Bool
! = bool′ true false
infixl 6 _||_
_||_ : Bool → Bool → Bool
x || y = bool′ y true x
infixl 7 _&&_
_&&_ : Bool → Bool → Bool
x && y = bool′ false y x
T : Bool → Type
T = bool′ ⊥ ⊤
open import Literals.Number
open import Agda.Builtin.Nat
instance
numberBool : Number Bool
numberBool = record
{ Constraint = λ { (suc (suc _)) → ⊥ ; _ → ⊤ }
; fromNat = λ { zero → false ; (suc _) → true }
}
_ : Bool
_ = 0
_ : Bool
_ = 1