В OCaml, как я могу оба:
в хаскеле это похоже на
f arg@{..} = some code using both arg and its fields
Используйте as. E.g.:
as
let f ((a, b) as original) = if a > b then (b, a) else original
или
let g = function | [] -> [] | (x :: _) as l -> x :: l