caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: "SooHyoung Oh" <shoh@duonix.com>
To: "Caml-List" <caml-list@inria.fr>
Subject: [Caml-list] Weak type, Open type
Date: Mon, 5 Aug 2002 16:10:24 +0900	[thread overview]
Message-ID: <000501c23c4f$2b781c50$fe00a8c0@hama> (raw)


Hi, Ocamlers!

While I've studying design pattern with ocaml,
I made the followding 3 classes (PART1):
(1) class virtual entry: base class
(2) class file: subclass of "entry" class
(3) class dir: subclass of "entry" class

I made some code using these classes on top level and it's ok. (PART 2).
While I translate the top level code into new class definition (PART3), it
makes some error.
The error message is on (PART 4).

It seems that (PART2) is weak type and (PART 3) is open type.

[Q 1] Is (PART2) is correct? I don't know why it doesn't make type error.
[Q 2] (depend on Q 1)
Can I translate (PART2) into new class definition like (PART 3) without type
error?
Then how?

============ (PART 1) class definition ===============
class virtual entry () =
object
    method virtual name: unit -> string
end;;

class file name =
object(self)
    inherit entry ()
    method name () = name
    method file_size () = 100
end;;

class dir name =
object(self)
    inherit entry ()
    method name () = name
    method dir_size () = 3000
end;;

=============== (PART 2) NO ERROR with weak type (?) ===================
let file_list = ref ([]: #entry list);;
let add e = file_list := (e:>entry) :: !file_list;;
let _ = add (new dir "root");;
let _ = add (new file "hello.txt");;

================ (PART 3) ERROR with open type (?) ================
class dir2 name =
object(self)
    inherit entry ()

    val file_list = ref ([]: #entry list)

    method name () = name
    method add e = file_list := (e:>entry) :: !file_list
end;;

================ (PART 4) error message  ================
    Some type variables are unbound in this type:
      class dir2 :
        string ->
        object
         val file_list : entry list ref
          method add : #entry -> unit
          method name : unit -> string
       end
    The method add has type #entry -> unit where .. is unbound

---
SooHyoung Oh
tel: 02)583-8709, 042)861-8649
cell. phone: 011-453-4303
web: http://www.duonix.com


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


             reply	other threads:[~2002-08-05  7:10 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-08-05  7:10 SooHyoung Oh [this message]
2002-08-05  9:30 ` Jacques Garrigue
2002-08-06  1:04   ` SooHyoung Oh

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='000501c23c4f$2b781c50$fe00a8c0@hama' \
    --to=shoh@duonix.com \
    --cc=caml-list@inria.fr \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).