12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970(*
include Either
*)type('a,'b)t=('a,'b)Stdcompat__init.either=|Leftof'a|Rightof'bletleftv=Leftvletrightv=Rightvletis_lefte=matchewith|Left_->true|Right_->falseletis_righte=matchewith|Left_->false|Right_->trueletfind_lefte=matchewith|Leftv->Somev|Right_->Noneletfind_righte=matchewith|Left_->None|Rightv->Somevletmap_leftfe=matchewith|Leftv->Left(fv)|Right_ase->eletmap_rightfe=matchewith|Left_ase->e|Rightv->Right(fv)letmap~left~righte=matchewith|Leftv->Left(leftv)|Rightv->Right(rightv)letfold~left~righte=matchewith|Leftv->leftv|Rightv->rightvletiter=foldletfor_all=foldletequal~left~righte1e2=matche1,e2with|Leftv1,Leftv2->leftv1v2|Rightv1,Rightv2->rightv1v2|Left_,Right_|Right_,Left_->falseletcompare~left~righte1e2=matche1,e2with|Leftv1,Leftv2->leftv1v2|Rightv1,Rightv2->rightv1v2|Left_,Right_->-1|Right_,Left_->1