123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566(**************************************************************************)(* *)(* OCaml *)(* *)(* Gabriel Scherer, projet Parsifal, INRIA Saclay *)(* *)(* Copyright 2019 Institut National de Recherche en Informatique et *)(* en Automatique. *)(* *)(* All rights reserved. This file is distributed under the terms of *)(* the GNU Lesser General Public License version 2.1, with the *)(* special exception on linking described in the file LICENSE. *)(* *)(**************************************************************************)type('a,'b)t=Leftof'a|Rightof'bletleftv=Leftvletrightv=Rightvletis_left=function|Left_->true|Right_->falseletis_right=function|Left_->false|Right_->trueletfind_left=function|Leftv->Somev|Right_->Noneletfind_right=function|Left_->None|Rightv->Somevletmap_leftf=function|Leftv->Left(fv)|Right_ase->eletmap_rightf=function|Left_ase->e|Rightv->Right(fv)letmap~left~right=function|Leftv->Left(leftv)|Rightv->Right(rightv)letfold~left~right=function|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