34 lines
866 B
OCaml
34 lines
866 B
OCaml
(* TEST
|
|
* expect
|
|
*)
|
|
|
|
type _ nat =
|
|
Zero : [`Zero] nat
|
|
| Succ : 'a nat -> [`Succ of 'a] nat;;
|
|
type 'a pre_nat = [`Zero | `Succ of 'a];;
|
|
type aux =
|
|
| Aux : [`Succ of [<[<[<[`Zero] pre_nat] pre_nat] pre_nat]] nat -> aux;;
|
|
|
|
let f (Aux x) =
|
|
match x with
|
|
| Succ Zero -> "1"
|
|
| Succ (Succ Zero) -> "2"
|
|
| Succ (Succ (Succ Zero)) -> "3"
|
|
| Succ (Succ (Succ (Succ Zero))) -> "4"
|
|
| _ -> . (* error *)
|
|
;;
|
|
[%%expect{|
|
|
type _ nat = Zero : [ `Zero ] nat | Succ : 'a nat -> [ `Succ of 'a ] nat
|
|
type 'a pre_nat = [ `Succ of 'a | `Zero ]
|
|
type aux =
|
|
Aux :
|
|
[ `Succ of [< [< [< [ `Zero ] pre_nat ] pre_nat ] pre_nat ] ] nat ->
|
|
aux
|
|
Line 14, characters 4-5:
|
|
14 | | _ -> . (* error *)
|
|
^
|
|
Error: This match case could not be refuted.
|
|
Here is an example of a value that would reach it:
|
|
Succ (Succ (Succ (Succ (Succ Zero))))
|
|
|}];;
|