Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

`module type of struct include Bar end` exposes %s#row when Bar contains private row types #6985

Closed
vicuna opened this issue Sep 9, 2015 · 1 comment

Comments

Projects
None yet
2 participants
@vicuna
Copy link

commented Sep 9, 2015

Original bug ID: 6985
Reporter: labichn
Assigned to: @garrigue
Status: closed (set by @xavierleroy on 2017-02-16T14:14:55Z)
Resolution: fixed
Priority: low
Severity: minor
Platform: x86_64
OS: GNU/Linux
OS Version: 4.1.6-1
Version: 4.02.3
Fixed in version: 4.03.0+dev / +beta1
Category: ~DO NOT USE (was: OCaml general)
Related to: #7438
Monitored by: @gasche @yallop @hcarty

Bug description

See steps to reproduce for a minimal example.

The module type of struct include Bar end idiom to get a strengthened version of the Bar module's signature does not act as expected when Bar contains private row variables (both PV and open obj). The module type contains an additional type, named rtype#row (where rtype is the type with the private row variable).

The obvious workaround is to avoid the module type of sugar.

This misbehavior is consistent from 3.12.1 up.

Steps to reproduce

cat bug.ml
module Foo
(Bar : sig type a = private [> A ] end) (Baz : module type of struct include Bar end) = struct end module Bazoinks = struct type a = [ A ] end
module Bug = Foo(Bazoinks)(Bazoinks)
ocamlc bug.ml
File "bug.ml", line 7, characters 27-35:
Error: Signature mismatch:
Modules do not match:
sig type a = [ A ] end is not included in sig type a = Bazoinks.a end The type a#row' is required but not provided
File "bug.ml", line 2, characters 13-37: Expected declaration

@vicuna

This comment has been minimized.

Copy link
Author

commented Sep 10, 2015

Comment author: @garrigue

Fixed in trunk at revision 16413.

Mtype.strengthen_sig should remove #row components, as the corresponding private types are converted to aliases.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.