open import Agda.Builtin.Nat using (_+_) renaming (Nat to )

record Foo : Set where
  field foo : 
        @0 bar : 

getFoo : Foo  
getFoo record {foo = n} = n

_+Foo_ : Foo  Foo  Foo
a +Foo b = record
  { foo = a .Foo.foo + b .Foo.foo
  ; bar = a .Foo.bar + b .Foo.bar }

testFoo : 
testFoo = (record {foo = 21; bar = 1} +Foo record {foo = 21; bar = 2}).Foo.foo

data Bar : Set where
  bar :   @0   Bar

getBar : Bar  
getBar (bar n _) = n

_+Bar_ : Bar  Bar  Bar
(bar a0 a1) +Bar (bar b0 b1) = bar (a0 + b0) (a1 + b1)

testBar : 
testBar with bar 21 1 +Bar bar 21 2
... | bar n _ = n

test : 
test = testFoo
     + testBar
     + getFoo (record {foo = 42; bar = 0})
     + getBar (bar 42 0)
{-# COMPILE AGDA2LAMBOX test #-}
Debug λ☐ Rocq
  ↪  
WASM C OCaml CakeML Rust Elm
  ↪  
  ↪