Library zoo_saturn.stack_mpmc_1__code
Require Import zoo.prelude.
Require Import zoo.language.typeclasses.
Require Import zoo.language.notations.
Require Import zoo_std.domain.
Require Import zoo_std.glist.
Require Import zoo.options.
Definition stack_mpmc_1ู create : val :=
๐ณ๐๐ป โฝ โ
๐ฟ๐ฒ๐ณ ยงglistู Nil.
Definition stack_mpmc_1ู push : val :=
๐ฟ๐ฒ๐ฐ "push" "t" "v" โ
๐น๐ฒ๐ "old" = !"t" ๐ถ๐ป
๐น๐ฒ๐ "new_" = โglistู Cons[ "v", "old" ] ๐ถ๐ป
๐ถ๐ณ ยฌ ๐ฐ๐ฎ๐ "t".[contents] "old" "new_" ๐๐ต๐ฒ๐ป (
domainู yield () โฎ
"push" "t" "v"
).
Definition stack_mpmc_1ู pop : val :=
๐ฟ๐ฒ๐ฐ "pop" "t" โ
๐บ๐ฎ๐๐ฐ๐ต !"t" ๐๐ถ๐๐ต
| glistู Nil โ
ยงNone
| glistู Cons "v" "new_" ๐ฎ๐ "old" โ
๐ถ๐ณ ๐ฐ๐ฎ๐ "t".[contents] "old" "new_" ๐๐ต๐ฒ๐ป (
โSome( "v" )
) ๐ฒ๐น๐๐ฒ (
domainู yield () โฎ
"pop" "t"
)
๐ฒ๐ป๐ฑ.
Definition stack_mpmc_1ู snapshot : val :=
๐ณ๐๐ป "t" โ
!"t".
Require Import zoo.language.typeclasses.
Require Import zoo.language.notations.
Require Import zoo_std.domain.
Require Import zoo_std.glist.
Require Import zoo.options.
Definition stack_mpmc_1ู create : val :=
๐ณ๐๐ป โฝ โ
๐ฟ๐ฒ๐ณ ยงglistู Nil.
Definition stack_mpmc_1ู push : val :=
๐ฟ๐ฒ๐ฐ "push" "t" "v" โ
๐น๐ฒ๐ "old" = !"t" ๐ถ๐ป
๐น๐ฒ๐ "new_" = โglistู Cons[ "v", "old" ] ๐ถ๐ป
๐ถ๐ณ ยฌ ๐ฐ๐ฎ๐ "t".[contents] "old" "new_" ๐๐ต๐ฒ๐ป (
domainู yield () โฎ
"push" "t" "v"
).
Definition stack_mpmc_1ู pop : val :=
๐ฟ๐ฒ๐ฐ "pop" "t" โ
๐บ๐ฎ๐๐ฐ๐ต !"t" ๐๐ถ๐๐ต
| glistู Nil โ
ยงNone
| glistู Cons "v" "new_" ๐ฎ๐ "old" โ
๐ถ๐ณ ๐ฐ๐ฎ๐ "t".[contents] "old" "new_" ๐๐ต๐ฒ๐ป (
โSome( "v" )
) ๐ฒ๐น๐๐ฒ (
domainู yield () โฎ
"pop" "t"
)
๐ฒ๐ป๐ฑ.
Definition stack_mpmc_1ู snapshot : val :=
๐ณ๐๐ป "t" โ
!"t".