···20202121let use f conv x = conv (f x)
22222323+let rec equal a b =
2424+ match a, b with
2525+ | Null, Null | Unit, Unit -> true
2626+ | Bool a, Bool b -> Bool.equal a b
2727+ | Int a, Int b -> Int.equal a b
2828+ | Int64 a, Int64 b -> Int64.equal a b
2929+ | Float a, Float b -> Float.equal a b
3030+ | Char a, Char b -> Char.equal a b
3131+ | String a, String b -> String.equal a b
3232+ | Pair (a, b), Pair (x, y) -> equal a x && equal b y
3333+ | List a, List b -> List.equal equal a b
3434+ | Constr (ka, va), Constr (kb, vb) ->
3535+ String.equal ka kb && Option.equal equal va vb
3636+ | Record a, Record b -> Fields.equal equal a b
3737+ | Null, _
3838+ | Unit, _
3939+ | Bool _, _
4040+ | Int _, _
4141+ | Int64 _, _
4242+ | Float _, _
4343+ | Char _, _
4444+ | String _, _
4545+ | Pair (_, _), _
4646+ | List _, _
4747+ | Constr (_, _), _
4848+ | Record _, _ -> false
4949+;;
5050+2351module Lit = struct
2452 let null = Null
2553 let unit = Unit
+1
lib/pidgin/repr.mli
···111111(** {1 Helpers} *)
112112113113val use : ('b -> 'a) -> 'a conv -> 'b conv
114114+val equal : t -> t -> bool
114115115116module Infix : sig
116117 val ( <$> ) : ('b -> 'a) -> 'a conv -> 'b conv