Try with existentials and GADT
This commit is contained in:
parent
9c1c2a82d7
commit
7496fd2637
21
deques.ml
Normal file
21
deques.ml
Normal 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 *)
|
Loading…
Reference in New Issue
Block a user