module FRP.JS.Bool where

open import FRP.JS.Primitive public using ( Bool ; true ; false )

not : Bool  Bool
not true  = false
not false = true

{-# COMPILED_JS not function(x) { return !x; } #-}

_≟_ : Bool  Bool  Bool
true   b = b
false  b = not b

{-# COMPILED_JS _≟_ function(x) { return function(y) { return x === y; }; } #-}

if_then_else_ :  {α} {A : Set α}  Bool  A  A  A
if true  then t else f = t
if false then t else f = f

{-# COMPILED_JS if_then_else_ function(a) { return function(A) { return function(x) {
  if (x) { return function(t) { return function(f) { return t; }; }; }
  else { return function(t) { return function(f) { return f; }; }; }
}; }; } #-}

_∧_ : Bool  Bool  Bool
true   b = b
false  b = false

{-# COMPILED_JS _∧_ function(x) { return function(y) { return x && y; }; } #-}

_∨_ : Bool  Bool  Bool
true   b = true
false  b = b

{-# COMPILED_JS _∨_ function(x) { return function(y) { return x || y; }; } #-}

_xor_ : Bool  Bool  Bool
true  xor b = not b
false xor b = b

_≠_ = _xor_

{-# COMPILED_JS _xor_ function(x) { return function(y) { return x !== y; }; } #-}
{-# COMPILED_JS _≠_ function(x) { return function(y) { return x !== y; }; } #-}