12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970(******************************************************************************)(* *)(* Sek *)(* *)(* Arthur Charguéraud, Émilie Guermeur and François Pottier *)(* *)(* Copyright Inria. All rights reserved. This file is distributed under the *)(* terms of the GNU Lesser General Public License as published by the Free *)(* Software Foundation, either version 3 of the License, or (at your *)(* option) any later version, as described in the file LICENSE. *)(* *)(******************************************************************************)type('a,'c)iter=('a->unit)->'c->unittype('a,'c)iteri=(int->'a->unit)->'c->unittype('a,'b,'c)fold_left=('b->'a->'b)->'b->'c->'btype('a,'b,'c)fold_right=('a->'b->'b)->'c->'b->'blet[@inline]fold_leftiter_leftfseedc=letaccu=refseedinletfx=accu:=f!accuxiniter_leftfc;!acculet[@inline]fold_rightiter_rightfcseed=letaccu=refseedinletfx=accu:=fx!accuiniter_rightfc;!acculet[@inline]iteri_leftiter_leftfs=leti=ref(-1)inletfa=(i:=!i+1;f!ia)initer_leftfslet[@inline]iteri_rightlengthiter_rightfs=leti=ref(lengths)inletfa=(i:=!i-1;f!ia)initer_rightfstype('a,'c)to_list='c->'alistlet[@inline]to_listfold_rightc=fold_right(funxxs->x::xs)c[]let[@inline]to_listiter_rightc=to_list(fold_rightiter_right)ctype('a,'c)for_all=('a->bool)->'c->boolexceptionInvalidlet[@inline]for_allitervalidc=tryiter(funx->ifnot(validx)thenraiseInvalid)c;truewithInvalid->false