sig
val rps_round : string -> string -> int
type move = Rock | Paper | Scissors
type result = AWin | BWin | Draw
val rps_round_enum : Ps1.move -> Ps1.move -> Ps1.result
val rps_round_nested_match : Ps1.move -> Ps1.move -> Ps1.result
val rps_round_single_match : Ps1.move -> Ps1.move -> Ps1.result
val rps_round_with_helper : Ps1.move -> Ps1.move -> Ps1.result
val all_pairs : 'a list -> ('a * 'a) list
val test_rps_eq :
(Ps1.move -> Ps1.move -> Ps1.result) ->
(Ps1.move -> Ps1.move -> Ps1.result) -> bool
val test_all_rps : (Ps1.move -> Ps1.move -> Ps1.result) list -> bool
type history = Ps1.move list
type player = Ps1.history -> Ps1.move
val always_rock : Ps1.player
val beats_last : Ps1.player
val always_plays : Ps1.move -> Ps1.player
val rps_game : Ps1.player -> Ps1.player -> bool
val pair_filter : ('a -> 'a -> 'a) -> 'a list -> 'a list
val tournament : ('a -> 'a -> 'a) -> 'a list -> 'a option
end