let rec same_length left right = match (left, right) with | [], [] -> true | _ :: left, _ :: right -> same_length left right | _ -> false let rec matches ~element expected actual = match (expected, actual) with | [], [] -> true | expected :: expected_rest, actual :: actual_rest -> element expected actual && matches ~element expected_rest actual_rest | _ -> false