From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.1.3 (2006-06-01) on yquem.inria.fr X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=disabled version=3.1.3 X-Original-To: caml-list@yquem.inria.fr Delivered-To: caml-list@yquem.inria.fr Received: from mail3-relais-sop.national.inria.fr (mail3-relais-sop.national.inria.fr [192.134.164.104]) by yquem.inria.fr (Postfix) with ESMTP id 99A5EBB84 for ; Sat, 17 Jan 2009 17:55:53 +0100 (CET) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AiACAOeccUnUnw6Uk2dsb2JhbACCO5FJAQEBAQkJCgkRBLgChXM X-IronPort-AV: E=Sophos;i="4.37,281,1231110000"; d="scan'208";a="21632019" Received: from fhw-relay07.plus.net ([212.159.14.148]) by mail3-smtp-sop.national.inria.fr with ESMTP/TLS/AES256-SHA; 17 Jan 2009 17:55:42 +0100 Received: from [87.113.104.168] (helo=leper.local) by fhw-relay07.plus.net with esmtp (Exim) id 1LOESU-0004yE-Ea for caml-list@yquem.inria.fr; Sat, 17 Jan 2009 16:55:42 +0000 From: Jon Harrop Organization: Flying Frog Consultancy Ltd. To: caml-list@yquem.inria.fr Subject: Re: [Caml-list] C++/C# inheritance is bad? Date: Sat, 17 Jan 2009 16:59:36 +0000 User-Agent: KMail/1.9.9 References: <200901171327.19141.jon@ffconsultancy.com> In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200901171659.36732.jon@ffconsultancy.com> X-Plusnet-Relay: 8f4d4832ad49cf9faded41d323553da0 X-Spam: no; 0.00; ocaml:01 ocaml's:01 lablgtk:01 datatypes:01 syntax:01 verbose:01 2009:98 frog:98 wrote:01 abstract:01 rewrite:01 caml-list:01 oop:01 implemented:02 tree:02 On Saturday 17 January 2009 14:35:22 Kuba Ober wrote: > I wonder how such a hierarchy would be implemented in a natural way > in OCaml? Assuming you stick with accepted wisdom, you would mimic the same effects using OCaml's object system, just as LablGTK does. However, you have picked the only pedagogical OO example: GUI widgets. In contrast, metaprogramming is the pedagogical example for algebraic datatypes. There is almost no need for users to extend the abstract syntax tree but there is huge value in being able to rewrite expressions using pattern matching. There is an idiomatic OOP solution to this problem that involves visitor patterns and so forth but it is comparatively verbose, obfuscated and unmaintainable. -- Dr Jon Harrop, Flying Frog Consultancy Ltd. http://www.ffconsultancy.com/?e