caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* [Caml-list] odd typing behavior
@ 2004-06-21 14:05 Henri DF
  2004-06-21 14:25 ` Nicolas Cannasse
  0 siblings, 1 reply; 2+ messages in thread
From: Henri DF @ 2004-06-21 14:05 UTC (permalink / raw)
  To: caml-list

Here is a boiled-down example of a problem that i can't figure out. 
Can anyone explain this ? 

thanks
henri


version 1:
---------
Compiling this fails with
File "proto/str/test.ml", line 5, characters 5-109:
The abbreviation c expands to type < dump_state : persist_t >
but is used with type < .. >



let h = Hashtbl.create 1
type persist_t = {rt : int}

class c = 
object(s)
  initializer 
    Hashtbl.replace h 1 (s :> c);
    
  method dump_state = {rt=1 }

end


version 2: 
---------
Same as version 1, except we use a float rather than a record 
for type  persist_t. This one compiles fine.

let h = Hashtbl.create 1
type persist_t = float

class c = 
object(s)
  initializer 
    Hashtbl.replace h 1 (s :> c);
    
  method dump_state = 1.0

end
  


version 3: 
---------
Same as version 1, except the first 2 lines are interchanged. This one 
compiles fine.

type persist_t = {rt : int}
let h = Hashtbl.create 1

class c = 
object(s)
  initializer 
    Hashtbl.replace h 1 (s :> c);
    
  method dump_state = {rt=1 }

end



-------------------
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] odd typing behavior
  2004-06-21 14:05 [Caml-list] odd typing behavior Henri DF
@ 2004-06-21 14:25 ` Nicolas Cannasse
  0 siblings, 0 replies; 2+ messages in thread
From: Nicolas Cannasse @ 2004-06-21 14:25 UTC (permalink / raw)
  To: Henri DF, caml-list

> Here is a boiled-down example of a problem that i can't figure out.
> Can anyone explain this ?
>
> thanks
> henri

That's a normal behavior : the compiler can't infer correctly the monorphic
type of the Hashtbl if this type have been declared after the instance is
created. (that's version 1 against 3). For version 2 , you're only defining
a type alias, not a new type, so there is no problem with that. Objects here
are not an issue, you can get the same behavior without them, but looks like
in this case the (more readable) error message is lost :

# let h = Hashtbl.create 0;;
val h : ('_a, '_b) Hashtbl.t = <abstr>
# type t = { x : int };;
type t = { x : int; }
# Hashtbl.add h 3 { x = 5 };;
Characters 16-25:
  Hashtbl.add h 3 { x = 5 };;
                  ^^^^^^^^^
This expression has type t but is here used with type 'a
The type constructor t would escape its scope

Regards,
Nicolas Cannasse

-------------------
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:[~2004-06-21 14:26 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-06-21 14:05 [Caml-list] odd typing behavior Henri DF
2004-06-21 14:25 ` Nicolas Cannasse

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