Try with existentials and GADT

This commit is contained in:
Georges Dupéron 2018-08-15 12:05:55 +02:00
parent 9c1c2a82d7
commit 7496fd2637

21
deques.ml Normal file
View File

@ -0,0 +1,21 @@
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 *)