caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: "Till Varoquaux" <till.varoquaux@gmail.com>
To: "Chris King" <colanderman@gmail.com>
Cc: "ocaml ml" <caml-list@inria.fr>
Subject: Re: [Caml-list] coercions issues
Date: Mon, 12 Mar 2007 22:35:45 +0100	[thread overview]
Message-ID: <9d3ec8300703121435i6413c32fyacee77038bf6c08a@mail.gmail.com> (raw)
In-Reply-To: <875c7e070703121411g33ad1c86k5de33e2dd5fbf239@mail.gmail.com>

Great!

That was indeed really helpfull! I really missed out that last bit, I
sould have payed more attention.

'a Mon.m and 'a O.m are monadic values. O.m and Mon.m are the same
type.  My intuition would be that they should be variant  ((a :> b m)
should behave like a >>= (fun x -> return (x:>b) where a is a value m
a monadic type and b a supertype of a)) can anyone concur that.

Cheers,
Till

On 3/12/07, Chris King <colanderman@gmail.com> wrote:
> On 3/12/07, Till Varoquaux <till.varoquaux@gmail.com> wrote:
> > This expression cannot be coerced to type
> >  O.o Ast.T.expr O.m = O.o Ast.T.expr Mon.m;
> > it has type O.o Ast_js.T.expr Mon.m but is here used with type
> >  O.o Ast.T.expr O.m = O.o Ast.T.expr Mon.m
> > Type
> >  O.o Ast_js.T.expr =
> >    [ `Binop of To.binop * To.expr * To.expr
> >    | `Cst of To.constant
> >    | `Ecall of To.ident * To.arg list
> >    | `Fun of To.ident list * To.bloc
> >    | `Lval of To.lvalue
> >    | `Unop of To.unop * To.expr ]
> > is not compatible with type
> >  O.o Ast.T.expr =
> >    [ `Binop of To.binop * To.expr * To.expr
> >    | `Cst of To.constant
> >    | `Ecall of To.ident * To.arg list
> >    | `Epos of Ast.location * To.expr
> >    | `Fun of To.ident list * To.bloc
> >    | `Lval of To.lvalue
> >    | `Unop of To.unop * To.expr ]
> > The first variant type does not allow tag(s) `Epos
>
> What sort of type is 'a O.m (or 'a Mon.m)?  If it's something whose 'a
> member is mutable, then such a coercion will be impossible (it would
> allow you to set the member to have the `Epos tag, which it can't).
> This would also happen if 'a O.m is declared as an abstract type,
> since O'Caml assumes invariance by default.  In the latter case, you
> need to specify that 'a O.m is covariant with its parameter:
>
> type +'a O.m
>
> This tells Caml that if 'a is a subtype of 'b, then 'a O.m is indeed a
> subtype of 'b O.m and you will be allowed to perform the above
> coercion.
>
> Hope this helps.
>
> - Chris
>


      reply	other threads:[~2007-03-12 21:35 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-03-12 20:11 Till Varoquaux
2007-03-12 21:11 ` [Caml-list] " Chris King
2007-03-12 21:35   ` Till Varoquaux [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=9d3ec8300703121435i6413c32fyacee77038bf6c08a@mail.gmail.com \
    --to=till.varoquaux@gmail.com \
    --cc=caml-list@inria.fr \
    --cc=colanderman@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).