Hello, personnaly, I am not happy with the semantics of when guarded clause (and If I remember well already mentionned it on the list): match (1,2) with (x,y) | (y,x) when y <= x -> (x,y) | _ -> assert false will raise an assert false ... while being quite elegant ... I think "when" should be distributive on "or pattern", which would imply that "when" should be allowed deep in patterns. It certainly makes pattern compilation harder, but it should not really change the completeness of pattern analysis because guarded clause are more or less ignored ? Cheers, Christoĥe