(* Products and Patterns *) val pair : int * int = (2, 3) val triple : int * real * string = (2, 2.0, "2") val pair_of_pairs : (int * int) * (real * real) = ((2,3),(2.0,3.0)) val quadruple : int * int * real * real = (2,3,2.0,3.0) val pair : int * int = (1+1, 5-2) val (m:int, n:int) = pair val (m:int, r:real, s:string) = triple val ((m:int,n:int), (r:real, s:real)) = pair_of_pairs val (m:int, n:int, r:real, s:real) = quadruple val (m:int,n:int,r:real,s:real) = pair_of_pairs val (m:int, r:real) = pair val (m:int, r:real) = triple type hyperlink = { protocol : string, address : string, display : string } val mailto_rwh : hyperlink = { protocol="mailto", address="rwh@cs.cmu.edu", display="Robert Harper" } val plcore_home : hyperlink = { protocol="http", address="//cs.cmu.edu/~rwh/plcore", display="Programming Languages Core Course" } val { protocol=port, address=addr, display=disp } = mailto_rwh val { protocol = port, ... } = plcore_home