records let you attach descriptive labels to the components of the tuple:
# type blah_record = { height : int; weight : int; char_tester : char -> bool };;
- # let b2 = { height = 1; weight = 2; char_tester = fun c -> c = 'M' };;
+ # let b2 = { height = 1; weight = 2; char_tester = (fun c -> c = 'M') };;
val b2 : blah_record = {height = 1; weight = 2; char_tester = <fun>}
# let b3 = { height = 1; char_tester = (fun c -> c = 'K'); weight = 3 };; (* also works *)
val b3 : blah_record = {height = 1; weight = 3; char_tester = <fun>}
match test with
| {height = h; weight = w; char_tester = test} ->
- (* go on to use h, w, and test ... *)
+ (* same as preceding *)
Anyway, using record types, we might define the tree zipper interface like so: