kaplan-tarjan-dequeues-ocaml/deques.ml
2018-08-15 12:06:16 +02:00

22 lines
750 B
OCaml

module Buffers = struct
type ('a, _) buffer =
| Buffer0 : ('a, [`Red]) buffer
| Buffer1 : 'a -> ('a, [`Yellow]) buffer
| Buffer2 : 'a * 'a -> ('a, [`Green]) buffer
| Buffer3 : 'a * 'a * 'a -> ('a, [`Green]) buffer
| Buffer4 : 'a * 'a * 'a * 'a -> ('a, [`Yellow]) buffer
| Buffer5 : 'a * 'a * 'a * 'a * 'a -> ('a, [`Red]) buffer
end
open Buffers
type 'a somebuffer =
| Buffer : ('a, 'x) buffer -> 'a somebuffer
type z = int somebuffer
(* let f b = match b with
* Buffer0 -> 42
* | Buffer1 x -> 42
* | Buffer2 (x, y) -> 42
* | Buffer3 (x, y, z) -> 42
* | Buffer4 (x, y, z, t) -> 42
* | Buffer5 (x, y, z, t, u) -> 42 *)