caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Jacques Garrigue <garrigue@kurims.kyoto-u.ac.jp>
To: warplayer@free.fr
Cc: caml-list@inria.fr
Subject: Re: [Caml-list] Type hidding
Date: Thu, 17 Jan 2002 22:40:41 -0800	[thread overview]
Message-ID: <20020117224041Z.garrigue@kurims.kyoto-u.ac.jp> (raw)
In-Reply-To: <01ca01c19f7e$a566fbd0$ac00a8c0@warp>

From: "Warp" <warplayer@free.fr>

> Ok I've tried this doing :
> 
>  (set_window_data wnd#hwnd 10);
>  let v = (get_window_data wnd#hwnd) in
>      (print_int (Obj.magic v: int));
> 
> But it print a wrong number ( not 10 )
> I've tried to trace calls into the C DLL where primitives *_window_data are,
> I can see the set_window_data call but the get_window_data call is NOT done
> by the interpreter

Aaargh! No, never use Obj.magic.
And please, never suggest to use it to resolve a type error.
Its only use is in relation to external C code, when you exactly know
what is happening!

Here the problem is that the type of v ends up being "wnd:hwnd -> 'a"
rather than "'a" as you expected. Since you omitted the label on the
argument, and the result type could be unified with anything, the
compiler believed that you were attempting to pass another argument...
By using magic, you are printing the address of a closure as an
integer.

Basic rules:
* a function should never return 'a if it does not also appear in a
  contravariant position (that is, as argument)
* it is better not to put labels on functions of only one argument,
  particularly when their return type is polymorphic (to avoid the
  above confusion)

The right response to your problem was already in other messages.

Cheers,

Jacques Garrigue
-------------------
Bug reports: http://caml.inria.fr/bin/caml-bugs  FAQ: http://caml.inria.fr/FAQ/
To unsubscribe, mail caml-list-request@inria.fr  Archives: http://caml.inria.fr


  reply	other threads:[~2002-01-18  7:37 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <000901c19ecf$b8c93ee0$0b01a8c0@mit.edu>
2002-01-17 17:44 ` Warp
2002-01-18  6:40   ` Jacques Garrigue [this message]
2002-01-16 20:09 Warp
2002-01-16 23:32 ` Ceri Storey
2002-01-17 10:57 ` Daniel de Rauglaudre

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=20020117224041Z.garrigue@kurims.kyoto-u.ac.jp \
    --to=garrigue@kurims.kyoto-u.ac.jp \
    --cc=caml-list@inria.fr \
    --cc=warplayer@free.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).