22 lines
750 B
OCaml
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 *)
|