From: Patrick M Doane <patrick@watson.org>
To: Chris Hecker <checker@d6.com>
Cc: caml-list@inria.fr
Subject: Re: [Caml-list] variant with tuple arg in pattern match?
Date: Wed, 4 Apr 2001 15:18:38 -0400 (EDT) [thread overview]
Message-ID: <Pine.BSF.3.96.1010404150612.5769A-100000@fledge.watson.org> (raw)
In-Reply-To: <4.3.2.7.2.20010404034802.0334fae0@shell16.ba.best.com>
Hi Chris,
You'll need to change your type declaration from
type foo = Foo of int * int
to
type foo = Foo of (int * int)
or
type bar = int * int
type foo = Foo of bar
Caml performs some optimizations on the representation of tuples to place
the arguments for the constructor as well as constructor name into one
word of memory. This can be a big win, both in memory usage and in access
time because one pointer access is removed.
It makes this distinction syntactically in the type declarations. In the
first case, the memory layout for values of type foo would be:
[ tag word | int1 | int2 ]
where the second case would be
[ tag word | pointer ] -> [ tag word | int1 | int2 ]
I would certainly like it if Caml could:
1) Treat this entirely as an optimization issue and not make a syntactic
distinction.
2) Be able to make reasonable choices about which representation would
be more appropriate.
I doubt that it would do as well as the programmer could and it certainly
would take a bit of effort without a real clear improvement.
On the other hand, left with the syntactic distincation, a possible
improvement would be to make a distinction between
type foo = Foo of bar
and
type foo = Foo of (bar)
so that "equational reasoning" could hold with regard to type
declarations. On several occasions, I have been tempted not to create
another type declaration because of this representation issue.
Hope this helps
Patrick
On Wed, 4 Apr 2001, Chris Hecker wrote:
>
> I can't find anything about this in the docs, faq, or list archives.
>
> I expected ii to be bound to the int * int tuple (1,2) in this pattern match:
>
> # type foo = Foo of int * int;;
> type foo = Foo of int * int
> # match Foo (1,2) with Foo ii -> ii ;;
> Characters 23-29:
> The constructor Foo expects 2 argument(s),
> but is here applied to 1 argument(s)
>
>
> This works:
>
> # match Foo (1,2) with Foo _ -> () ;;
> - : unit = ()
>
> But I can't get an "as" clause to work, either:
>
> # match Foo (1,2) with Foo ((_,_) as ii) -> ii ;;
> Characters 21-38:
> The constructor Foo expects 2 argument(s),
> but is here applied to 1 argument(s)
>
> But, even if the "as" worked, it's messy compared to the top method.
>
> Chris
>
> -------------------
> To unsubscribe, mail caml-list-request@inria.fr. Archives: http://caml.inria.fr
>
-------------------
To unsubscribe, mail caml-list-request@inria.fr. Archives: http://caml.inria.fr
next prev parent reply other threads:[~2001-04-04 19:18 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-04-04 11:04 Chris Hecker
2001-04-04 18:47 ` Alain Frisch
2001-04-04 19:18 ` Patrick M Doane [this message]
2001-04-04 19:36 ` Chris Hecker
2001-04-04 19:49 ` Daniel de Rauglaudre
2001-04-05 8:19 ` Christian RINDERKNECHT
2001-04-04 19:49 ` Patrick M Doane
2001-04-06 13:52 ` Xavier Leroy
2001-04-07 1:42 ` Patrick M Doane
2001-04-07 6:44 ` Daniel de Rauglaudre
2001-04-07 7:42 ` Fergus Henderson
2001-04-08 19:45 ` Pierre Weis
2001-04-08 20:37 ` Charles Martin
2001-04-08 23:57 ` Brian Rogoff
2001-04-09 0:22 ` Alain Frisch
2001-04-09 16:07 ` Pierre Weis
2001-04-10 8:23 ` Michel Mauny
2001-04-10 9:14 ` Xavier Leroy
2001-04-10 10:09 ` Michel Mauny
2001-04-10 10:44 ` reig
2001-04-10 11:32 ` Michel Mauny
2001-04-10 11:47 ` reig
2001-04-10 12:10 ` reig
2001-04-10 12:35 ` Michel Mauny
2001-04-10 12:49 ` Marcin 'Qrczak' Kowalczyk
2001-04-09 6:23 ` Mattias Waldau
2001-04-09 7:34 ` Daniel de Rauglaudre
2001-04-09 15:57 ` Pierre Weis
2001-04-10 9:07 ` Sven LUTHER
2001-04-09 8:20 ` Christian RINDERKNECHT
2001-04-10 2:54 ` Patrick M Doane
2001-04-10 19:04 ` John Max Skaller
2001-04-08 0:22 jgm
2001-04-10 12:17 Dave Berry
2001-04-10 13:12 ` Marcin 'Qrczak' Kowalczyk
2001-04-10 21:26 ` Bruce Hoult
2001-04-10 22:34 ` John Prevost
2001-04-10 13:51 ` Frank Atanassow
2001-04-10 17:25 Dave Berry
2001-04-10 23:16 ` Marcin 'Qrczak' Kowalczyk
2001-04-10 17:33 Dave Berry
2001-04-10 22:34 ` John Prevost
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=Pine.BSF.3.96.1010404150612.5769A-100000@fledge.watson.org \
--to=patrick@watson.org \
--cc=caml-list@inria.fr \
--cc=checker@d6.com \
/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