caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: bluestorm <bluestorm.dylc@gmail.com>
To: raphlalou@gmail.com
Cc: caml-list@yquem.inria.fr, sieira <jaimito.hendrix@gmail.com>
Subject: Re: [Caml-list] Doubt about function delaration parameter
Date: Wed, 15 Dec 2010 18:12:43 +0100	[thread overview]
Message-ID: <AANLkTimi8HWotF7R4uhpLw9O8LPdG-HHcTvfmBK4b+Y3@mail.gmail.com> (raw)
In-Reply-To: <201012151756.48546.raphlalou@gmail.com>

[-- Attachment #1: Type: text/plain, Size: 3133 bytes --]

In Caml Light, the rule is the following :
- if you declare a *new* type, such as a sum type ( Foo | Bar | Baz ) or a
record type ( { foo : t; bar : t' } ), use "="
- if you just add an alias, a new name for an existing type, use "=="

It is an alias if the right-hand side is a "type expression" (something you
could use as is in a type annotation)

It is interesting to note that, though less syntactically visible, the
difference has not vanished in OCaml.
OCaml type declarations may have two components, a type "equation" (~ alias
for a type expression) and a "representation" (~ new ADT). For example the
following is valid :

  type test = A.ty = A | B | C

The type is declared to be an alias to the type "ty" in the module A, and
also represented by the sum (A | B | C) : the definition is "re-exported",
and an error will be thrown if A.ty is different from (A | B | C). It is
occasionnaly nice to make representation explicit, while still keeping
compatibility at the type level (the two types are considered equal by the
type checker), and can also be avoid to "strenghten" an external dependency
: if the upstream type definition changes, I'm sure my code will fail here
instead of producing weird errors later.
See the OCaml manual :
http://caml.inria.fr/pub/docs/manual-ocaml/manual016.html

The difference between type declarations and alias/abbreviation is also
significant for the semantics of "private types", which are an extension (or
rather several successive extensions) to the OCaml language described here
: http://caml.inria.fr/pub/docs/manual-ocaml/manual021.html#toc76 .



On Wed, Dec 15, 2010 at 5:56 PM, Raphael Proust <raphlalou@gmail.com> wrote:

> Le mercredi 15 décembre 2010 17:15:23, sieira a écrit :
> > Thanks for your replies. I'm now having some issue with Raphael's
> > suggestion of using (string * string) list;; as the menu type.
> >
> >
> > type menu = (string*string) list;;
> >
> > Results in a syntax error at the first parenthesis, while
> >
> > type menu = string*string;;
> >
> > fails too (at the asterisk)
> >
> > It seems like I'm missing something. Since according to the
> > http://caml.inria.fr/pub/docs/manual-caml-light/node3.5.html
>  documentantion
> > , this sintax should be right.
> >
> > I'm using Camllight 0.81 by François Boisson running in Ubuntu lucid lynx
>
> I just installed Camllight and I encountered the problem as you. Because
> the
> type menu is just a shorter name for the complete type (string * string)
> list,
> you have to use:
> type menu == ( string * string ) list ;;
>
> (with two '=' signs)
> I don't know the exact rule about this. It might be close to the difference
> between 'type' and 'data' in Haskell.
>
> Good luck!
> --
> _______
> Raphaël
>
> _______________________________________________
> Caml-list mailing list. Subscription management:
> http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
> Archives: http://caml.inria.fr
> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
> Bug reports: http://caml.inria.fr/bin/caml-bugs
>
>

[-- Attachment #2: Type: text/html, Size: 4617 bytes --]

      reply	other threads:[~2010-12-15 17:13 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-12-15 14:03 sieira
2010-12-15 15:14 ` Ashish Agarwal
2010-12-15 15:18 ` Esther Baruk
2010-12-15 16:15 ` sieira
2010-12-15 16:37   ` David Allsopp
2010-12-15 16:56   ` Raphael Proust
2010-12-15 17:12     ` bluestorm [this message]

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=AANLkTimi8HWotF7R4uhpLw9O8LPdG-HHcTvfmBK4b+Y3@mail.gmail.com \
    --to=bluestorm.dylc@gmail.com \
    --cc=caml-list@yquem.inria.fr \
    --cc=jaimito.hendrix@gmail.com \
    --cc=raphlalou@gmail.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;
as well as URLs for NNTP newsgroup(s).