abstract Top = User, System ** { cat Move ; fun MUser : Query -> Move ; MSystem : Reply -> Move ; }