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 Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by yquem.inria.fr (Postfix) with ESMTP id 5BFF2BC6B for ; Thu, 8 Nov 2007 10:05:38 +0100 (CET) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AgAAAExgMkfAXQInh2dsb2JhbACOfwEBAQgKKQ X-IronPort-AV: E=Sophos;i="4.21,388,1188770400"; d="scan'208";a="4020437" Received: from concorde.inria.fr ([192.93.2.39]) by mail2-smtp-roc.national.inria.fr with ESMTP; 08 Nov 2007 10:05:40 +0100 Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by concorde.inria.fr (8.13.6/8.13.6) with ESMTP id lA895bPv032440 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=OK) for ; Thu, 8 Nov 2007 10:05:38 +0100 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ao8CAExgMkeCNhAB/2dsb2JhbAA X-IronPort-AV: E=Sophos;i="4.21,388,1188770400"; d="scan'208";a="4020433" Received: from kurims.kurims.kyoto-u.ac.jp ([130.54.16.1]) by mail2-smtp-roc.national.inria.fr with ESMTP; 08 Nov 2007 10:05:37 +0100 Received: from localhost (silicon [130.54.16.72]) by kurims.kurims.kyoto-u.ac.jp (8.13.8/8.13.8) with ESMTP id lA895WYo009435 for ; Thu, 8 Nov 2007 18:05:32 +0900 (JST) Date: Thu, 08 Nov 2007 18:05:32 +0900 (JST) Message-Id: <20071108.180532.68538077.keiko@kurims.kyoto-u.ac.jp> To: caml-list@inria.fr Subject: a function for polymorphic and monomorphic objects From: Keiko Nakata X-Mailer: Mew version 4.2 on Emacs 20.7 / Mule 4.1 (AOI) Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Miltered: at concorde with ID 4732D161.000 by Joe's j-chkmail (http://j-chkmail . ensmp . fr)! X-Spam: no; 0.00; polymorphic:01 polymorphic:01 monomorphic:01 monomorphic:01 int:01 int:01 define:02 define:02 argument:02 objects:02 workaround:03 let:03 let:03 function:08 function:08 Hello. Can I define a function taking as argument an object with a method, say, "map" whose type is instantiatable to (int -> int) -> int list? I have two object; one with a polymorphic map, the other with a monomorphic map. let p = object method map : 'a.(int -> 'a) -> 'a list = fun f -> List.map f [1;2;3] end;; let q = object method map : (int -> int) -> int list = fun f -> List.map f [1;2;3] end;; I want to define a function like double below, which is applicable to both p and q. let double o = o#map (fun x -> x*2);; The only workaround I came up with is let double2 f = f (fun x -> x*2);; double2 p#map;; double2 q#map;; Yet this is not very nice.... With best regards, Keiko