123456789101112131415161718192021222324252627282930313233343536(* Copyright (C) 2025 Petter A. Urkedal <paurkedal@gmail.com>
*
* This library is free software; you can redistribute it and/or modify it
* 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, with the LGPL-3.0 Linking Exception.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* and the LGPL-3.0 Linking Exception along with this library. If not, see
* <http://www.gnu.org/licenses/> and <https://spdx.org>, respectively.
*)openShimstype'areturn=('a,string)resulttype('i,'j)unifier=|Equal:('ireturn,'ireturn)unifier|Assume:(('a,'b)Type.eq->('i,'j)unifier)->('a->'i,'b->'j)unifiertype(_,_)tag=..type('i,'a)t={tag:('i,'a)tag;unify_tag:'j'b.('j,'b)tag->('i,'j)unifieroption;construct:'i;}letunify:typeijab.(i,a)t->(j,b)t->(i,j)unifieroption=funxy->x.unify_tagy.tag