caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* [Caml-list] This ground coercion is not principal?
@ 2013-01-10 20:15 bob zhang
  2013-01-10 21:06 ` Jeremie Dimino
  0 siblings, 1 reply; 8+ messages in thread
From: bob zhang @ 2013-01-10 20:15 UTC (permalink / raw)
  To: Caml List

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

Hi List,
  I have came across a corner case in ocaml typing here,
The source code is pasted below(extracted from a large code base), it
triggers the warning 18.
My question, is there any elegant solution without introducing local types?

------------------------------------------------------------------------------------------
type ant = [`Ant of string]
type 'a mlist =
    [ `LNil
    | `LCons of ('a * 'a mlist )
    | ant]
let a = object(self)
  method ant : ant -> ant=
    fun (`Ant a)  ->
      `Ant a
  method mlist: 'all_a0 'all_b0 .
      ('self_type -> 'all_a0 -> 'all_b0) ->
        'all_a0 mlist -> 'all_b0 mlist=
          fun (type t) mf_a  ->
            function
              | `LNil ->  `LNil
              | `LCons (a0,a1) ->
                  let a0 = mf_a self a0 in
                  let a1 = self#mlist mf_a a1 in `LCons (a0, a1)
              | #ant as a0 -> (((* Obj.magic *) self#ant a0) :> (* 'all_b0
*) t mlist)
end






















-- 
Regards
-- Bob

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

^ permalink raw reply	[flat|nested] 8+ messages in thread
* [Caml-list] "this ground coercion is not principal"
@ 2015-02-25  4:47 Martin DeMello
  2015-02-25  9:29 ` Jeremie Dimino
  2015-02-25 10:38 ` Jeremy Yallop
  0 siblings, 2 replies; 8+ messages in thread
From: Martin DeMello @ 2015-02-25  4:47 UTC (permalink / raw)
  To: OCaml List

What does this warning mean? I got it while compiling some code off
github [https://github.com/JoeDralliam/OcsfmlExamples/blob/master/Examples/sockets.ml]
and by experimenting it seems to be related to this bit from the
manual

Note that the coercion ( expr :>  typexpr ) is actually an abbreviated
form, and will only work in presence of private abbreviations if
neither the type of expr nor typexpr contain any type variables. If
they do, you must use the full form ( expr :  typexpr1 :>  typexpr2 )
where typexpr1 is the expected type of expr. Concretely, this would be
(x : N.t :> int) and (l : N.t list :> int list) for the above
examples.

but I could not find anything on google for either "ground coercion"
or "principal type coercion" that would explain what it was actually
saying. Could someone please point me to a reference?

martin

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2015-02-25 23:04 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-01-10 20:15 [Caml-list] This ground coercion is not principal? bob zhang
2013-01-10 21:06 ` Jeremie Dimino
2013-01-10 21:12   ` bob zhang
2015-02-25  4:47 [Caml-list] "this ground coercion is not principal" Martin DeMello
2015-02-25  9:29 ` Jeremie Dimino
2015-02-25 10:38 ` Jeremy Yallop
2015-02-25 21:35   ` Martin DeMello
2015-02-25 23:04     ` Jeremy Yallop

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