Mantis Bug Tracker

View Issue Details Jump to Notes ] Issue History ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0006173OCamlOCaml generalpublic2013-09-12 17:512014-04-04 04:52
Reporterjohnwhitington 
Assigned Togarrigue 
PrioritynormalSeverityminorReproducibilityalways
StatusclosedResolutionfixed 
PlatformOSOS Version
Product Version4.01.0 
Target Version4.02.0+devFixed in Version4.02.0+dev 
Summary0006173: Typing error message is worse that before
Description  OCaml version 4.01.0+rc1
# let f x = x @ [];;
val f : 'a list -> 'a list = <fun>
# f ();;
Error: The variant type list has no constructor ()

Is this related to the new variants work? Is it related to the fact that () is, unusually, a valid constructor (this has been debated before, I know)?

The previous behaviour is much less confusing.

 OCaml version 4.00.1

# let f x = x @ [];;
val f : 'a list -> 'a list = <fun>
# f ();;
Error: This expression has type unit but an expression was expected of type
         'a list
TagsNo tags attached.
Attached Files

- Relationships
has duplicate 0006295closed Unclear error message in 4.01.0 

-  Notes
(0010376)
furuse (reporter)
2013-09-19 05:00

I am also confused by this error message.

Is it possible to print which type the constructor (here ()) belongs to? Does the new variant name disambiguation thing prevent it?
(0010377)
garrigue (manager)
2013-09-19 05:17

Indeed, the new variant name disambiguation allows using a constructor based on the type, even if this constructor is not the latest one defined, or not even in scope.

We could easily list up the types in scope which contain the said constructor.
But would this really help ?
Knowing that () is of type unit doesn't seem really relevant here.
Maybe it is just that the wording is not so good.
Something like:

Error: An expression of type 'a list was expected.
        The constructor () does not belong to the variant type list.

might be clearer.

Note also that if it was just a typo, the error message is often better than before:

# (Same 3 : int option);;
Error: The variant type option has no constructor Same
Did you mean Some?
(0010378)
furuse (reporter)
2013-09-19 05:19

I prefer the message you proposed.
(0010379)
johnwhitington (reporter)
2013-09-19 15:12
edited on: 2013-09-19 15:17

It is suggested by doligez in bug 0005936 that () as a constructor may be removed soon. This would fix this particular problem.

I didn't mean to suggest that the new message is in general a problem, I just think it's awfully confusing to the user when something as fundamental as unit is involved.

(0011217)
garrigue (manager)
2014-04-04 04:52

As explained in PR#6173, the error message in trunk is now:

Error: This variant expression is expected to have type 'a list
       The constructor () does not belong to type list

This seams clear enough.

- Issue History
Date Modified Username Field Change
2013-09-12 17:51 johnwhitington New Issue
2013-09-19 05:00 furuse Note Added: 0010376
2013-09-19 05:17 garrigue Note Added: 0010377
2013-09-19 05:19 furuse Note Added: 0010378
2013-09-19 15:12 johnwhitington Note Added: 0010379
2013-09-19 15:17 johnwhitington Note Edited: 0010379 View Revisions
2014-01-16 22:26 yallop Relationship added has duplicate 0006295
2014-04-02 17:18 doligez Status new => acknowledged
2014-04-02 17:18 doligez Target Version => 4.02.0+dev
2014-04-04 04:52 garrigue Note Added: 0011217
2014-04-04 04:52 garrigue Status acknowledged => closed
2014-04-04 04:52 garrigue Assigned To => garrigue
2014-04-04 04:52 garrigue Resolution open => fixed
2014-04-04 04:52 garrigue Fixed in Version => 4.02.0+dev


Copyright © 2000 - 2011 MantisBT Group
Powered by Mantis Bugtracker