//Only Direct implementatino defined import raw ("scripts/dfa/propagation.lp"). import raw ("scripts/dfa/polymorphism.lp"). import raw ("scripts/effects-communication/communication.lp"). import raw ("scripts/effects-communication/config.lp"). CommGuard = type variant{Invalid, Valid, Outdated}. CommDirect = type { value:: int }. CommGuarded = type { value:: int, state:: CommGuard }. guard:: commDirect { init=function::CommDirect{ {value = 0} } read= function(vault1:: CommDirect):: int{ (vault1::CommDirect; commop(read))["value"] } write= function(vault2:: CommDirect, valueNew:: int)::CommDirect{ (vault2::CommDirect;dfa_pseudo(vault2)) + {value = valueNew}:: int; commop(write); dfa_uppy(vault2) } } main=function::int; entry { x1 = init()::Comm; dfa_polym(ret). x2 = write(x1, 1)::Comm; dfa_polym(arg). a = read(x2)::int; dfa_polym(arg). a }