Quick actions

cmd+k|ctrl+k

Navigation

Languages

Demo Polarized Protocol

Snippet info

Language

Ats

Visibility

public

Author

steinwaywhw

Created

2018-04-17T16:42:25Z

Updated

2018-04-17T16:50:53Z

datasort stype = 
| psend of (vt@ype)
| precv of (vt@ype)
| pclose
| pwait
| pseq of (stype, stype)

stadef :: = pseq
absvtype channel (stype)

extern fun send {s:stype} {a:vt@ype} (!channel (psend (a) :: s) >> channel (s), a): void
extern fun recv {s:stype} {a:vt@ype} (!channel (precv (a) :: s) >> channel (s)): a
extern fun close (channel (pclose)): void
extern fun wait  (channel (pwait)): void

stadef proto_srv = precv (int) :: precv (int) :: psend (bool) :: pwait
stadef proto_cli = psend (int) :: psend (int) :: precv (bool) :: pclose 

extern fun srv (channel (proto_srv)): void 
extern fun cli (channel (proto_cli)): void 

implement srv (ch) = let 
    val a = recv ch
    val b = recv ch 
    val _ = send (ch, a = b)
in 
    wait ch
end 

implement cli (ch) = let 
    val _ = $showtype ch
    val _ = send (ch, 1)
    val _ = $showtype ch
    val _ = send (ch, 2)
    val _ = $showtype ch
    val b = recv (ch)
    val _ = $showtype ch
in 
    close ch;
end
INFO