caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
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


  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;
as well as URLs for NNTP newsgroup(s).