In functions, -> ! indicates the function returns bottom, i.e., doesn't return. In pipe protocol definitions, -> ! means "terminate the session", which is analogous to returning unit (the 1 type), not bottom (the 0 type).
It seems more conceptually in-line to write session-end transitions with no arrow, like ... { continue(T) -> state2, close(U) } ...
In functions,
-> !indicates the function returns bottom, i.e., doesn't return. In pipe protocol definitions,-> !means "terminate the session", which is analogous to returning unit (the 1 type), not bottom (the 0 type).It seems more conceptually in-line to write session-end transitions with no arrow, like
... { continue(T) -> state2, close(U) } ...