From: John Max Skaller <skaller@ozemail.com.au>
To: Brian Smith <brian-l-smith@uiowa.edu>
Cc: OCaml Mailing list <caml-list@inria.fr>
Subject: Re: [Caml-list] Polymorphic methods (longest error message ever!)
Date: Mon, 08 Jul 2002 12:08:04 +1000 [thread overview]
Message-ID: <3D28F404.7000104@ozemail.com.au> (raw)
In-Reply-To: <3D28E9F8.5020308@uiowa.edu>
Brian Smith wrote:
>
> # class node : node_type = object (self)
> method as_variant = `Node (self :> node_type)
> end;;
> ^^^^
> This expression cannot be coerced to type
> node_type = < as_variant : 'a. [> `Node of node_type] as 'a >;
> it has type < as_variant : 'c; .. > as 'b but is here used with type 'b
>
> # class node : node_type = object (self)
> method as_variant : 'a. [> `Node of node_type] as 'a
> = `Node (self :> node_type)
> end;;
> The class type object method as_variant : [> `Node of node_type] end
> is not matched by the class type node_type
> The class type object method as_variant : [> `Node of node_type] end
> is not matched by the class type
> object method as_variant : [> `Node of node_type] end
> The method as_variant has type 'a. [> `Node of node_type] as 'a
> but is expected to have type 'b. [> `Node of node_type] as 'b
> The universal variable 'b would escape its scope
>
> I have no idea what the error message means.
Heh. I can't answer your question, but I have to fall about laughing
(is there a French idiom for that?) at the idea this is a long error
message.
I often get error messages of 100's of lines, my console buffer isn't set
to 10,000 lines without reason. Just imagine your polymophic variant type
[> Node of node_type]
was replace statement_t below .. and don't ignore the fact that
the ctor arguments themselves are similar polymorphic variant types
like expr_t ... and this isn't a large variant.
----------------------------------------------
and statement_t =
[
| `AST_open of range_srcref * qualified_name_t
| `AST_comment of string (* for documenting generated code *)
(* definitions *)
| `AST_function of range_srcref * id_t * parameter_t list * typecode_t
* statement_t list
| `AST_procedure of range_srcref * id_t * parameter_t list *
statement_t list
(* types *)
| `AST_union of range_srcref * id_t * (id_t * typecode_t) list
| `AST_struct of range_srcref * id_t * (id_t * typecode_t) list
| `AST_type_alias of range_srcref * id_t * typecode_t
(* variables *)
| `AST_val_decl of range_srcref * id_t * typecode_t option * expr_t option
| `AST_var_decl of range_srcref * id_t * typecode_t option * expr_t option
(* module system *)
| `AST_untyped_module of range_srcref * id_t * statement_t list
| `AST_typed_module of range_srcref * id_t * typecode_t * statement_t
list
| `AST_module_binding of range_srcref * id_t * expr_t
| `AST_typed_functor of range_srcref * id_t * parameter_t list *
typecode_t * statement_t list
| `AST_untyped_functor of range_srcref * id_t * parameter_t list *
statement_t list
| `AST_interface of range_srcref * id_t * statement_t list
| `AST_type of range_srcref * id_t
| `AST_function_decl of range_srcref * id_t * typecode_t
| `AST_procedure_decl of range_srcref * id_t * typecode_t
(* control structures: primitives *)
| `AST_label of range_srcref * id_t (* for testing the code generator! *)
| `AST_goto of range_srcref * id_t (* for testing the code generator! *)
| `AST_call of range_srcref * expr_t * expr_t
| `AST_read of range_srcref * id_t
| `AST_return of range_srcref * expr_t
| `AST_nop of range_srcref * string
| `AST_block of range_srcref * statement_t list
| `AST_if of
range_srcref *
(range_srcref * (expr_t * statement_t)) list *
(range_srcref * statement_t)
| `AST_while of range_srcref * expr_t * statement_t
(* exceptions *)
| `AST_attempt of
range_srcref *
(range_srcref * statement_t) * (* the attempt *)
(range_srcref * statement_t list) * (* the handlers *)
(range_srcref * statement_t list) (* the finally block *)
| `AST_except_handler of range_srcref * id_t * parameter_t list *
statement_t list
| `AST_raise of range_srcref * id_t * expr_t
(* binding structures [prolog] *)
| `AST_abs_decl of range_srcref * id_t * c_t
| `AST_const_decl of range_srcref * id_t * typecode_t * c_t
| `AST_fun_decl of range_srcref * id_t * typecode_t list * typecode_t
* c_t
| `AST_proc_decl of range_srcref * id_t * typecode_t list * c_t
| `AST_header of range_srcref * string
| `AST_code of range_srcref * string
| `AST_export of range_srcref * suffixed_name_t * string
]
--
John Max Skaller, mailto:skaller@ozemail.com.au
snail:10/1 Toxteth Rd, Glebe, NSW 2037, Australia.
voice:61-2-9660-0850
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
next prev parent reply other threads:[~2002-07-08 2:08 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-07-08 1:25 Brian Smith
2002-07-08 2:08 ` John Max Skaller [this message]
2002-07-08 2:53 ` Jacques Garrigue
2002-07-09 6:23 ` [Caml-list] Polymorphic methods (syntax) Brian Smith
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3D28F404.7000104@ozemail.com.au \
--to=skaller@ozemail.com.au \
--cc=brian-l-smith@uiowa.edu \
--cc=caml-list@inria.fr \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox