data Bool : Set where
  false true : Bool

_∧_ : Bool → Bool → Bool
_∧_ = λ where
  true true → true
  _    _    → false

-- make sure reserved Rust names do not conflict
r#true  = true
r#false = false

testBool : Bool
testBool = r#true ∧ r#false

open import Agda.Builtin.Nat using (Nat; zero; suc)

bool2Nat : Bool → Nat
bool2Nat = λ where
  true  → 0
  false → 42

-- Issue #3
isZero : Nat → Bool
isZero zero    = true
isZero (suc _) = false

toNonZero : Nat → Nat
toNonZero x with isZero x
... | true  = 1
... | false = x

if_then_else_ : ∀ {A : Set} → Bool → A → A → A
if true  then t else _ = t
if false then _ else f = f

testIte : Nat
testIte = if true then 42 else 0

open import Agda.Builtin.Nat

test : Nat
test = bool2Nat testBool
     + bool2Nat (isZero 5)
     + toNonZero 42
     + testIte
{-# COMPILE AGDA2LAMBOX test #-}
Debug λ☐ Rocq
  ↪  
WASM C OCaml CakeML Rust Elm
  ↪  
  ↪