123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657(** This module defines signatures that are to be included in other signatures to ensure a
consistent interface to [equal] functions. There is a signature ([S], [S1], [S2],
[S3]) for each arity of type. Usage looks like:
{[
type t
include Equal.S with type t := t
]}
or
{[
type 'a t
include Equal.S1 with type 'a t := 'a t
]} *)open!Import[%%template[@@@mode.defaultm=(global,local)]type'at='a@m->'a@m->booltype'aequal=('at[@modem])moduletypeS=sigtypetval%templateequal:(tequal[@modem])[@@modem=(global,m)]endmoduletypeS1=sigtype'atval%templateequal:('aequal[@modem])->('atequal[@modem])[@@modem=(global,m)]endmoduletypeS2=sigtype('a,'b)tval%templateequal:('aequal[@modem])->('bequal[@modem])->(('a,'b)tequal[@modem])[@@modem=(global,m)]endmoduletypeS3=sigtype('a,'b,'c)tval%templateequal:('aequal[@modem])->('bequal[@modem])->('cequal[@modem])->(('a,'b,'c)tequal[@modem])[@@modem=(global,m)]end]