Skip to main content

Module TableclothComparator

Comparator provide a way for custom data structures to be used with Maps and Sets

Say we have a module Book which we want to be able to create a Set of

module Book = struct
type t = {
isbn: string;
title: string;
}

let compare bookA bookB =
String.compare bookA.isbn bookb.isbn
end

First we need to make our module conform to the S signature.

This can be done by using the Make functor.

module Book = struct
type t = {
isbn: string;
title: string;
}

let compare bookA bookB =
String.compare bookA.isbn bookb.isbn

include Comparator.Make(struct
type nonrec t = t

let compare = compare
end)
end

Now we can create a Set of books

Set.fromList (module Book) [
{ isbn="9788460767923"; title="Moby Dick or The Whale" }
]

module type T​

module type T = sig ... end

T represents the input for the Make functor

type t​

type ('a, 'identity) t

type comparator​

type ('a, 'identity) comparator = ( 'a, 'identity ) t

This just is an alias for t

module type S​

module type S = sig ... end

The output type of Make.

type s​

type ('a, 'identity) s =   (module S   with type identity = 'identity    and type t = 'a)

A type alias that is useful typing functions which accept first class modules like Map.empty or Set.fromArray

module Make​

module Make (M : T) : S with type t := M.t

Create a new comparator by providing a module which satisifies T.