1 2 3 4 5 6 7
abstract Top = User, System ** { cat Move ; fun MUser : Query -> Move ; MSystem : Reply -> Move ; }