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