open import Agda.Builtin.Nat using (Nat; _+_; _*_)
open import Agda.Builtin.Bool using (Bool; true; false)
add : Nat → Nat → Nat
add = _+_
add2l : Nat → Nat
add2l = 2 +_
add2r : Nat → Nat
add2r = _+ 2
add3 : Nat → Nat → Nat → Nat
add3 x y = (x + y) +_
maybeAddL : Bool → Nat → Nat
maybeAddL true = 40 +_
maybeAddL false = 10 +_
maybeAddLb : Bool → Nat → Nat
maybeAddLb true = λ x → 40 + x
maybeAddLb false = λ x → 10 + x
maybeAddR : Bool → Nat → Nat
maybeAddR true = _+ 40
maybeAddR false = _+ 10
maybeAddRb : Bool → Nat → Nat
maybeAddRb true = λ x → x + 40
maybeAddRb false = λ x → x + 10
maybeAdd : Bool → Nat → Nat → Nat
maybeAdd true = _+_
maybeAdd false = _*_
maybeAdd3 : Bool → Nat → Nat → Nat
maybeAdd3 true x = _+ (40 + x)
maybeAdd3 false x = _+ (10 + x)
maybeAdd3b : Bool → Nat → Nat → Nat
maybeAdd3b true x y = y + (40 + x)
maybeAdd3b false x y = y + (10 + x)
data Maybe (A : Set) : Set where
nothing : Maybe A
just : A → Maybe A
maybeInc : Maybe Nat → Nat → Nat
maybeInc (just y) x = x + y
maybeInc nothing x = x
maybeAddM : Maybe Nat → Nat → Nat → Nat
maybeAddM (just z) x y = x + y + z
maybeAddM nothing x y = x + y
maybeIncInc : Maybe (Maybe Nat) → Nat → Nat
maybeIncInc (just (just y)) x = x + y
maybeIncInc (just nothing) x = x + 1
maybeIncInc nothing x = x
maybeIncInc2 : Maybe (Maybe Nat) → Nat → Nat → Nat
maybeIncInc2 (just (just z)) x y = x + y + z
maybeIncInc2 (just nothing) x y = x + y + 1
maybeIncInc2 nothing x y = x + y
open import Agda.Builtin.Nat
test : Nat
test
= add 40 2
+ add2l 40
+ add2r 40
+ add3 40 1 1
+ maybeAddL true 2
+ maybeAddLb true 2
+ maybeAddR true 2
+ maybeAddRb true 2
+ maybeAdd true 40 2
+ maybeAdd false 2 21
+ maybeAdd3 true 1 1
+ maybeAdd3b true 1 1
+ maybeInc (just 40) 2
+ maybeAddM (just 40) 1 1
+ maybeIncInc (just (just 40)) 2
+ maybeIncInc2 (just (just 40)) 1 1
{-# COMPILE AGDA2LAMBOX test #-}
Debug λ☐ Rocq ↪
WASM C OCaml CakeML Rust Elm