caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Luc Maranget <Luc.Maranget@inria.fr>
To: Paul Guyot <pguyot@kallisys.net>
Cc: caml-list@inria.fr
Subject: Re: [Caml-list] failwith, raise and type inference
Date: Fri, 2 Apr 2004 16:09:48 +0200	[thread overview]
Message-ID: <20040402160514.A29362@beaune.inria.fr> (raw)
In-Reply-To: <f0521064cbc931c993b50@[10.0.1.201]>; from pguyot@kallisys.net on Fri, Apr 02, 2004 at 03:41:26PM +0200

> Hello,
> 
> My students came up with a behavior of ocaml I couldn't explain.
> I have exactly the same result with 3.07pl2 and a fresh copy checked 
> out from CVS.
> 
> >let rec f1 key dict =
> >	match dict with
> >		[] -> failwith "The key " ^ key ^ " could not be found"
> >		| (aKey, aValue)::tail ->
> >			if (aKey = key)
> >			then aValue
> >			else f1 key tail;;
> 
> is of type:
> 
> val f1 : string -> (string * string) list -> string = <fun>
> 

> Any idea?

I think I have a clue :

failwith "The key " ^ key ^ " could not be found"

is parsed as

(failwith "The key ") ^ key ^ " could not be found"

Hence the overall type of this expression is string.


The other result of the pattern matching matching has the same type
as aValue

Finally, you get that the type of aValue (second component of
your pairs is string).

I think you can check my interpretation by issuing

>f1 "bonga" []
>;;
Exception: Failure "The key ".


Of course, the intended coding is
failwith ("The key " ^ key ^ " could not be found")


Admitedly caml syntax is not very  beginner friendly.
But the observed parsing has some internal logics.

On usualy understand that  f x + y is in fact  (f x) + y
But here, with failwith being a ``special'' function and ^ a ``special''
operator, well...


Cheers,

--Luc Maranget

-------------------
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


  parent reply	other threads:[~2004-04-02 14:09 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-04-02 13:41 Paul Guyot
2004-04-02 13:49 ` Frederic van der Plancke
2004-04-02 13:56   ` Paul Guyot
2004-04-02 13:51 ` Nicolas Cannasse
2004-04-02 13:59 ` Correnson Loïc
2004-04-02 14:09 ` Luc Maranget [this message]
2004-04-02 19:39   ` [Caml-list] weird floating poing behavior on windows Zeno Lee
2004-04-02 20:03     ` Greg Bacon
2004-04-02 20:07     ` David Brown
2004-04-02 20:31       ` Zeno Lee
2004-04-02 20:50         ` Pierre Weis
2004-04-02 22:01         ` Brian Hurt
2004-04-02 21:58     ` Brian Hurt
2004-04-02 20:28   ` [Caml-list] failwith, raise and type inference Pierre Weis
2004-04-05 22:52     ` Ker Lutyn
2004-04-06  1:07       ` Jacques Garrigue
2004-04-06  5:23         ` Issac Trotts
2004-04-06 15:15           ` skaller
2004-04-06  1:15       ` Christophe TROESTLER
2004-04-06  7:05         ` skaller
2004-04-06 11:29           ` Eric C. Cooper
2004-04-09  7:18           ` Christophe TROESTLER
2004-04-09  7:32             ` Xavier Leroy
2004-04-09  8:03               ` skaller

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=20040402160514.A29362@beaune.inria.fr \
    --to=luc.maranget@inria.fr \
    --cc=caml-list@inria.fr \
    --cc=pguyot@kallisys.net \
    /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).