OCaml не имеет необязательных позиционных параметров, потому что, поскольку OCaml поддерживает каррирование, если вы пропустите некоторые аргументы, это будет выглядеть как частичное приложение. Однако для именованных параметров существуют необязательные именованные параметры.
Нормальные именованные параметры объявляются так:
let foo ~arg1 = arg1 + 5;;
Необязательные именованные параметры объявляются так:
let odp ?(ftw = "OMG!!") () = print_endline ftw;;
(* and can be used like this *)
odp ~ftw:"hi mom" ();;
odp ();;
Обратите внимание, что за любыми необязательными именованными параметрами должен следовать хотя бы один необязательный параметр, потому что в противном случае, например, приведенный выше «odp» будет выглядеть как частичное приложение.