package dmap
All checked builds passInstall
dune-project
Dependency
Authors
Maintainers
Sources
md5=fe62cbaa5916073a175b6f3b32dc8b68
sha512=9bbb186dc6d94e3f7ba5f64e74cb66cd13d5a5ff10b1924367a6629b49c9943a1f65ff65d5fe49a8fcfd69f15ddf4a4c93e0bf654cef781296576deace554d9b
Description
A library that implements dependent (heterogeneous) maps. The type of keys is indexed by the type of the associated values, so that the maps might contain data whose types may depend on the values of keys. It is adapted from the implementation code for maps that is used by the standard library.
Added to opam-repository:
README
Dmap
Dmap is an OCaml library that implements dependent (heterogeneous) immutable maps. The type of keys is indexed by the type of the associated values, so that the maps can contain data whose types may depend on the values of keys. It is adapted from the implementation code for maps that is used by the OCaml standard library.
For instance:
module IntBool = struct
(* The type for the keys of our maps. The index ['a] denotes the type
of the values that will be associated to the keys. In the case of the
[Int] constructor, the map will expect data of type [string]. In the
case of the [Bool] constructor, the map will expect values of type [char].
*)
type 'a t = Int : int -> string t | Bool : bool -> char t
(* Total order on values of type [_ t]. *)
let compare (type a1 a2) (v1 : a1 t) (v2 : a2 t) : (a1, a2) cmp =
match (v1, v2) with
| Int n1, Int n2 -> if n1 = n2 then Eq else if n1 < n2 then Lt else Gt
| Bool b1, Bool b2 ->
if b1 = b2 then Eq else if (not b1) || b2 then Lt else Gt
| Bool _, Int _ -> Lt
| Int _, Bool _ -> Gt
end
(* We create a module of maps whose keys have type [IntBool.t] *)
module IntBoolMap = Dmap.Make(IntBool)
(* Definition of a map of type [IntBoolMap.t]. *)
let m = IntBoolMap.(empty |> add (Int 42) "hello" |> add (Bool true) 'A')
(* Some queries on the map [m] *)
let () =
assert (IntBoolMap.find_opt (Int 42) m = Some "hello");
assert (IntBoolMap.find_opt (Bool true) m = Some 'A');
assert (IntBoolMap.find_opt (Bool false) m = None)This creates a new module IntBoolMap, with a new type IntBoolMap.t of maps from IntBool.t to string or char. As specified by the GADT^1 definition of IntBool.t, the values associated to the keys of the form Int n have type string, and the values associated to the keys of the form Bool b have type char.
You can install Dmap using opam by running opam install dmap,
Alternatively, you can download, build and install the development version by running the following commands:
git clone https://gitlab.inria.fr/bmontagu/dmap.git
cd dmap
opam pin add .Dev Dependencies (1)
-
odoc
with-doc
Optional Dependencies
None
Used by (2)
Conflicts
None
Build status
Results of building dmap with each compiler on check.ci.ocaml.org, run of against opam-repository 8a77e58. All results for this package.
Each result links to its build log. To keep crawlers from overloading the site, build logs require a GitHub sign-in (see ocurrent/opam-health-check). On your first log, GitHub asks you to “Authorize opam-health-check”, the OCurrent app that runs these checks; it sees only your public profile, not your repositories. The sign-in lasts 30 days.
| Version | OCaml 4.11 | OCaml 4.14 | OCaml 5.2 | OCaml 5.4 | OCaml 5.5 |
|---|---|---|---|---|---|
| 0.5 (this version) | n/a | good | good | good | good |
| 0.4 | good | good | good | good | good |
- good Package successfully built
- partial One of the dependencies failed to build
- bad Package failed to build
- n/a Package is not available in this environment
- internal Internal failure