Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Standard.ComparatorComparator 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;
}
endFirst we need to make our module conform to the S signature.
This can be done by using the make function or the Make functor.
module Book = struct
type t = {
isbn: string;
title: string;
}
module ByIsbn = (
val Comparator.make ~compare:(fun bookA bookB ->
String.compare bookA.isbn bookb.isbn
)
)
endThen we can create a Set
Set.ofList (module Book.ByIsbn) [
{ isbn="9788460767923"; title="Moby Dick or The Whale" }
]A type alias that is useful typing functions which accept first class modules like Map.empty or Set.ofArray
Create a new comparator by providing a compare function.
Examples
module Book = struct
type t = {
isbn: string;
title: string;
}
module ByTitle = (
val Comparator.make ~compare:(fun bookA bookB ->
String.compare bookA.title bookb.title)
)
end
let books = Set.empty (module Book.ByTitle)module Make (Comparable : T) : S with type t := Comparable.tCreate a new comparator by providing a module which satisifies T.