From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from majordomo@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id OAA01279; Mon, 9 Dec 2002 14:21:02 +0100 (MET) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f Received: from concorde.inria.fr (concorde.inria.fr [192.93.2.39]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id OAA01627 for ; Mon, 9 Dec 2002 14:20:59 +0100 (MET) X-SPAM-Warning: Sending machine is listed in blackholes.five-ten-sg.com Received: from sm203.163.com ([202.108.44.203]) by concorde.inria.fr (8.11.1/8.11.1) with ESMTP id gB9DKsX23821 for ; Mon, 9 Dec 2002 14:20:57 +0100 (MET) Received: from localhost (localhost [127.0.0.1]) by sm203.163.com (Postfix) with SMTP id 0A0F21C462B81 for ; Mon, 9 Dec 2002 21:20:15 +0800 (CST) Received: from 163.com (unknown [159.226.149.121]) by 192.168.1.203 (Coremail) with SMTP id bZ8DAHqY9D1oAJV5.1 for ; Mon, 09 Dec 2002 21:20:15 +0800 (CST) Message-ID: <3DF50918.7040704@163.com> Date: Mon, 09 Dec 2002 21:20:24 +0000 From: onlyclimb User-Agent: Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.0.1) Gecko/20021005 X-Accept-Language: en-us, en MIME-Version: 1.0 To: caml-list@inria.fr Subject: [Caml-list] How to throw away oop? Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk Dear Caml List: I think it is an old question. but it really bother me quite much . Since i have a java background and touched ML not long, i found it is hard not to think in a OOP way in some cases. (even though OCaml has an OO system, i feel that only the Module style is the true way of programming in Ocaml, so i tried not to use classes as possible ) Here is a situation i can not overcome: for example in a OOP style.: DNA and Protein can be a subclass of Seq. And in fact there are many kind of sequences , so we can suppose the number of the kind of Seq is infinite. ie. the subclasses of Seq can be infinite. and DNA and Protein are just two of them I want to get the length of the Seq. so in OOP Style . we can define a function : val length : #seq -> int to solve the problem . or just use inheritance seq#length However if do like above , i must define say class dna or class protein Now i want not to use classes. How can i achieve the same effect? Maybe i can use functor like module DefautSeq = Seq.Make ( DefaultSeqIntf : SeqIntf) struct end module DNA = Seq.Make ( DNAIntf : SeqIntf ) struct end module Protein = Seq.Make (DNAIntf : SeqIntf) struct end now how to get the length of such seqs ? (in fact length is usually included in the SeqIntf . here i only to show a simple case. for example Chromasome is a kind of DNA , some funtions only for Chromasome and DNA not suitable for Protein so those functions surely will not be included in SeqIntf . here length () refers to such functions ) if i do like this, val length : DefaultSeq.t -> int. DNA.t will not be accepted by such function . only DefaultSeq .t accepted I have tryied to use module DefaultSeq = DNA before the length function . It is OK But First it is not elegant . Secd , if module DefaultSeq = DNA is after the length function. It will not work. Third , sometime you must restore the orignal module , it is tedious also not elegant :-( And maybe can genrate a new functor LENGTH . bu t i can not image to generate a module in every case just a proper function will do ! Then, How can i do ? Thanks climb ------------------- 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