caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* [Caml-list] strange behaviour  with variants and "cannot be generalized"
@ 2003-09-09  7:15 Beck01, Wolfgang
  2003-09-09 12:11 ` Jacques Garrigue
  0 siblings, 1 reply; 2+ messages in thread
From: Beck01, Wolfgang @ 2003-09-09  7:15 UTC (permalink / raw)
  To: caml-list


I have three files

vtop.ml --------------------------

type 'a t = {
    t_c : 'a;
}

v1.ml ----------------------------

open Vtop

type t = {
    v1_x : int array;
}

let init = `V1 { v1_x = [| 0 |] }

v2.ml ----------------------------

open Vtop

type t= {
    v2_x : int;
}

let init = `V2 { v2_x = 0 }
---------------------------------

compilation fails with "The type of this expression _[> `V1 of t ] Vtop.t,
contains type variables that cannot be generalized"

However, if I change the type of v1_x to a string or some large struct,
it compiles without warning and works. The error seems only to occur
with arrays. I am using version 3.06. 

Is there an explanation for this behaviour?

Wolfgang Beck

-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners


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

* Re: [Caml-list] strange behaviour  with variants and "cannot be generalized"
  2003-09-09  7:15 [Caml-list] strange behaviour with variants and "cannot be generalized" Beck01, Wolfgang
@ 2003-09-09 12:11 ` Jacques Garrigue
  0 siblings, 0 replies; 2+ messages in thread
From: Jacques Garrigue @ 2003-09-09 12:11 UTC (permalink / raw)
  To: BeckW; +Cc: caml-list

From: "Beck01, Wolfgang" <BeckW@t-systems.com>

> v1.ml ----------------------------
> 
> open Vtop
> 
> type t = {
>     v1_x : int array;
> }
> 
> let init = `V1 { v1_x = [| 0 |] }
> 
> compilation fails with "The type of this expression _[> `V1 of t ] Vtop.t,
> contains type variables that cannot be generalized"
> 
> However, if I change the type of v1_x to a string or some large struct,
> it compiles without warning and works. The error seems only to occur
> with arrays. I am using version 3.06. 
> 
> Is there an explanation for this behaviour?

Sure: [| 0 |] creates a mutable data structure, and as such is
considered as a side-effecting expression. As a result the type of
init cannot be generalized.

OCaml 3.07 is more clever about that, and the above program would be
accepted with no problem.

Jacques Garrigue

-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners


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

end of thread, other threads:[~2003-09-09 12:11 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-09-09  7:15 [Caml-list] strange behaviour with variants and "cannot be generalized" Beck01, Wolfgang
2003-09-09 12:11 ` Jacques Garrigue

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