From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Original-To: caml-list@sympa.inria.fr Delivered-To: caml-list@sympa.inria.fr Received: from mail4-relais-sop.national.inria.fr (mail4-relais-sop.national.inria.fr [192.134.164.105]) by sympa.inria.fr (Postfix) with ESMTPS id 359EF7ED1A for ; Fri, 18 May 2012 18:01:09 +0200 (CEST) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AlwDANtxtk/RVaG2kGdsb2JhbABFskgEgRkIIgEBAQEJCQ0HFAQjghUBAQEEEgITGQEbHQEDDAYFCw0uIgERAQUBHBkih10BAwueEAkDjCKCcoUFChknDVeIdQEFDIpzNIF0gx4DlSCOGj2ECQ X-IronPort-AV: E=Sophos;i="4.75,617,1330902000"; d="scan'208";a="144263280" Received: from mail-gg0-f182.google.com ([209.85.161.182]) by mail4-smtp-sop.national.inria.fr with ESMTP/TLS/RC4-MD5; 18 May 2012 18:00:55 +0200 Received: by ggnm2 with SMTP id m2so4628657ggn.27 for ; Fri, 18 May 2012 09:00:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-type:content-transfer-encoding; bh=m9S8crezB+Qih1CGaLqET3yAOMFts0AjSeT7om4QX5U=; b=gCOogUFydnSG7grQvRLsd06z7lSSawthXVE3Zmzt4fugTXWBfayzQ+bH6Rr9cifGQT jxBTW2H7+7ify7w6Ivm8Koqy0AXwMdy/EuCSdAMX4HoIy5qETtp9MIBXBV2UUMtZhpOY es+Fj0TIpKY7HUIcTFf8NGa/r4jwa6/o+IVarnXmX2PLaGPCqitpje6U7+WbpIE2ahIw PGD6PAGQiQP8I4Bvr9SHsWo66ZpFrulbwb9urKpKNBOoanZT31QxTTcVCt20oeoPULMV JoibbK19my/4wMwrmb9CWYCd8ZS9QbT3pzIoExomAUEZSvKE6PyjyUWG9s3jyfwSGTKo 38UA== Received: by 10.50.180.201 with SMTP id dq9mr1014326igc.56.1337356853982; Fri, 18 May 2012 09:00:53 -0700 (PDT) MIME-Version: 1.0 Received: by 10.50.94.39 with HTTP; Fri, 18 May 2012 09:00:13 -0700 (PDT) In-Reply-To: <4FB669B4.6000200@ens-lyon.org> References: <87d36bnafe.fsf@frosties.localnet> <4FB669B4.6000200@ens-lyon.org> From: Gabriel Scherer Date: Fri, 18 May 2012 18:00:13 +0200 Message-ID: To: David.Teller@ens-lyon.org Cc: Yitzhak Mandelbaum , OCaml mailing list Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Subject: Re: [Caml-list] optional functions in modules You can regain that polymorphism at a moderate efficiency cost by eta-expan= ding: let mmap2 f =3D match mmap with | None -> failwith "Nope" | Some x -> x = f;; val mmap2 : ('a -> 'b) -> 'a list -> 'b list =3D On Fri, May 18, 2012 at 5:24 PM, David Rajchenbach-Teller wrote: > On 5/17/12 7:43 PM, Yitzhak Mandelbaum wrote: >> Thanks to everyone who responded. =A0FWIW, I found the argument in favor= of options most compelling as a general approach. >> >> Yitzhak >> > > Note that there is a drawback to that approach: loss of polymorphism. > > # let mmap =3D Some List.map;; > val mmap : (('a -> 'b) -> 'a list -> 'b list) option =3D Some > > # let mmap2 =3D match mmap with | None -> failwith "Nope" | Some x -> x;; > val mmap2 : ('_a -> '_b) -> '_a list -> '_b list =3D > > I suspect that first-class modules can help here, but I have not really > had time to toy with them yet. > > Cheers, > =A0David >