12345678910111213141516171819202122232425262728letexistsp=function|Somex->px|None->falseletfor_allp=function|Somex->px|None->trueletmap2binopopt1opt2=matchopt1,opt2with|Somex1,Somex2->Some(binopx1x2)|_->None(** Open this to use applicative functor/monad syntax for {!option}. *)moduleSyntax=struct(* Applicative functor. *)let(let+)xf=Option.mapfxlet(and+)xy=matchx,ywith|Somex,Somey->Some(x,y)|_,_->None(* Monad *)let(let*)=Option.bindlet(and*)=(and+)let(>>=)=Option.bindend