From: Roberto Di Cosmo <roberto@dicosmo.org>
To: caml-list@inria.fr
Subject: [Caml-list] Funny name for a type variable in the output: should this be filed on the BTS?
Date: Thu, 22 Mar 2012 10:51:43 +0100 [thread overview]
Message-ID: <20120322095143.GA30016@voyager> (raw)
I was playing around some more with GADTs, preparing my next course
on functional programming, and came across an example on
which the type checker outputs a type containing a funny name
for a type variable.
I do not know if this qualifies as a bug, so before filing it, I'd
love some feedback.
Here we are: I am writing an example to show how one can code
a well typed length function for empty/nonempty list; we start
with the type definition
type empty
type nonempty
type ('a, 'b) l =
Nil : (empty, 'b) l
| Cons : 'b * ('a, 'b) l -> (nonempty, 'b) l;;
then we move on to the length function
let rec length : type a b. (a,b) l -> 'a = function
| Nil -> 0
| (Cons (_,r)) -> 1+ (length r);;
Hey, you say, the natural type to declare for length should be
type a b. (a,b) l -> int
but as you see, for some mysterious reason I ended
up writing something silly (dont ask why, I am just
very well known to step on strange bugs as easily
as I breath)
type a b. (a,b) l -> 'a
The type checker is happy anyway: 'a will be instantiated
to int, and the declaration of length is accepted... but now
look at the output type
val length : ('a1, 'b) l -> int = <fun>
Why do we get 'a1, and not 'a, in the type?
Well, probably, since 'a is instantiated to int during
type checking, it may be the case that 'a, as type name, is
still marked as taken during the type output, so we get ('a1,'b)
The type is perfectly sound... it is just 'surprising' for
a regular user... do you think this should be considered a bug?
--Roberto
------------------------------------------------------------------
Professeur En delegation a l'INRIA
PPS E-mail: roberto@dicosmo.org
Universite Paris Diderot WWW : http://www.dicosmo.org
Case 7014 Tel : ++33-(0)1-57 27 92 20
5, Rue Thomas Mann
F-75205 Paris Cedex 13 Identica: http://identi.ca/rdicosmo
FRANCE. Twitter: http://twitter.com/rdicosmo
------------------------------------------------------------------
Attachments:
MIME accepted, Word deprecated
http://www.gnu.org/philosophy/no-word-attachments.html
------------------------------------------------------------------
Office location:
Bureau 6C08 (6th floor)
175, rue du Chevaleret, XIII
Metro Chevaleret, ligne 6
------------------------------------------------------------------
next reply other threads:[~2012-03-22 9:48 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-03-22 9:51 Roberto Di Cosmo [this message]
2012-03-22 12:05 ` Julien Signoles
2012-03-22 13:39 ` Jonathan Protzenko
2012-03-22 14:40 ` Didier Remy
2012-03-22 22:12 ` Jacques Garrigue
2012-03-22 23:35 ` Roberto Di Cosmo
2012-03-23 5:52 ` Gabriel Scherer
2012-03-23 6:45 ` Jacques Garrigue
2012-03-23 8:13 ` Roberto Di Cosmo
2012-03-23 10:25 ` Gabriel Scherer
2012-03-24 0:24 ` Jacques Garrigue
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=20120322095143.GA30016@voyager \
--to=roberto@dicosmo.org \
--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