Browse thread
[Caml-list] Question on typing of class/object and optional argument.
- Nobuyuki Tomizawa
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
| Date: | -- (:) |
| From: | Nobuyuki Tomizawa <n-tomizawa@m...> |
| Subject: | [Caml-list] Question on typing of class/object and optional argument. |
Dear list: I have a question on class/object with optional arguments method. I could not compile following program: ------------------------------------------------------------ class foo s = object val str : string = s method to_string ?(opt = "" ) () = opt ^ s end;; let l = [new foo "a"; new foo "b"; new foo "c" ];; List.iter (fun e -> print_endline (e#to_string ())) l;; ------------------------------------------------------------ with folloing message. ------------------------------------------------------------ File "test.ml", line 8, characters 52-53: This expression has type foo list but is here used with type < to_string : unit -> string > list Type foo = < to_string : ?opt:string -> unit -> string > is not compatible with type < to_string : unit -> string > ------------------------------------------------------------ In contrast, I did not get the above message if I rewrote the program into module style like: ------------------------------------------------------------ module type BAR = sig type t val create : string -> t val to_string : ?opt:string -> t -> string end;; module Bar : BAR = struct type t = string let create t = t let to_string ?(opt = "") t = opt ^ t end;; let m = [Bar.create "a"; Bar.create "b"; Bar.create "c" ];; List.iter (fun e -> print_endline (Bar.to_string e)) m;; ------------------------------------------------------------ I can not understand how different these two versions are in Ocaml's typing systems. Colud you please tell me the point and what should I know to understand well about such kind of typing issues? Thanks in advance. Nobuyuki Tomizawa ------------------- 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