(condition,extra) = case diagonal of NE | p2 == go N p1 -> ( True , go' N p2' ) NE | p2 == go E p1 -> ( True , go' E p2' ) SE | p2 == go S p1 -> ( True , go' S p2' ) SE | p2 == go E p1 -> ( True , go' E p2' ) SW | p2 == go S p1 -> ( True , go' S p2' ) SW | p2 == go W p1 -> ( True , go' W p2' ) NW | p2 == go N p1 -> ( True , go' N p2' ) NW | p2 == go W p1 -> ( True , go' W p2' ) _ -> ( False , undefined )