caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* [Caml-list] passing object to a function fails to compile (lablgtk2 involved)
@ 2012-07-16  6:49 Ivan
  2012-07-16 15:29 ` Anthony Tavener
  0 siblings, 1 reply; 4+ messages in thread
From: Ivan @ 2012-07-16  6:49 UTC (permalink / raw)
  To: caml-list

Excuse me for the topic formulation, but I cannot state it better.

I have two simple functions:

let fill_model model name_col value_col =
  let pars = P.from_file "parallax.cfg" in
  let add_record (name, value) =
    let iter = model#append () in
    model#set ~row:iter ~column:name_col  name;
    model#set ~row:iter ~column:value_col   value
  in List.iter add_record pars

(where P.from_file some function generating an assoc list -> (string * string) list )

and 

let create_model () =
  let cols   = new GTree.column_list in
  let name_col  = cols#add Gobject.Data.string
  and value_col = cols#add Gobject.Data.string in
  let model  = GTree.list_store cols in
  (model, name_col, value_col)

When I try to pass values returned by function `create_model' to function `fill_model' with the following expression:

  let model, name_col, value_col = create_model () in
  fill_model model name_col value_col

compiler refuses with:

Error: This expression has type GTree.list_store
       but an expression was expected of type
         < append : unit -> Gtk.tree_iter;
           set : row:Gtk.tree_iter -> column:'a -> Types.id -> unit; .. >
       The universal variable 'b would escape its scope

If I write the two functions in one, like this:
let fill_and_create_model () =
  let cols   = new GTree.column_list in
  let name_col  = cols#add Gobject.Data.string
  and value_col = cols#add Gobject.Data.string in
  let model  = GTree.list_store cols in
  let pars = P.resolve_links (P.from_file "parallax.cfg") in
  let add_record (name, value) =
    let iter = model#append () in
    model#set ~row:iter ~column:name_col  name;
    model#set ~row:iter ~column:value_col "shit"
  in List.iter add_record pars

everything compiles without a notice.

Please, can somebody explain me what I am doing wrong, and what is  "universal variable 'b" that escapes from its scope.

Big thanks, in advance for any help!


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

end of thread, other threads:[~2012-07-18 16:53 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-07-16  6:49 [Caml-list] passing object to a function fails to compile (lablgtk2 involved) Ivan
2012-07-16 15:29 ` Anthony Tavener
2012-07-17  8:32   ` Ivan
2012-07-18 16:53     ` Olivier Andrieu

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