Closed yoshihiro503 closed 5 years ago
The following code is obtained by reducing the code generated from "erl_type.ml" with deriving show
and sexp_of
:
type t = None
and u = { tag: string option }
let (pp_u : u -> int)
=
let open Ppx_deriving_runtime in
fun x ->
(function
| None -> 0
| Some x -> 1
) x.tag
The above code can be compiled under ppx_deriving=4.3
as follows:
$ opam list | grep ppx_deriving
ppx_deriving 4.3 Type-driven code generation for OCaml >=4.02
$ ocamlfind ocamlc -package ppx_deriving.show -c minimize.ml
$
However, it fails under ppx_deriving=4.4
as follows:
$ opam list | grep ppx_deriving
ppx_deriving 4.4 Type-driven code generation for OCaml >=4.02.2
$ ocamlfind ocamlc -package ppx_deriving.show -c minimize.ml
File "minimize.ml", line 10, characters 5-9:
Error: This variant pattern is expected to have type t
The constructor Some does not belong to type t
More concise code, which does not depend the ppx_deriving module:
(*
https://github.com/ocaml-ppx/ppx_deriving/commit/9eaeeba1b89daf27e41d25d4b3410d4a64cb120a#diff-98ca6e213a0326f9610bb7d60c2f950a
*)
module Predef = struct
type 'a _option = 'a option = None | Some of 'a
end
type t = None
and u = { tag: string option }
(* The module corresponds to deriving 4.3 *)
module M43 = struct
type 'a option = 'a Predef._option = None | Some of 'a
end
(* The module corresponds to deriving 4.4 *)
module M44 = struct
type nonrec 'a option = 'a option
end
let (pp_u : u -> int)
=
(* M43 -> OK; M44 -> Fail *)
let open
M43
in
fun x ->
(function
| None -> 0
| Some x -> 1
) x.tag
The project get a build error due to
ppx_deriving.4.4
released at two days ago.