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 mail1-relais-roc.national.inria.fr (mail1-relais-roc.national.inria.fr [192.134.164.82]) by sympa.inria.fr (Postfix) with ESMTPS id 4F5F17EC41 for ; Tue, 23 Oct 2012 01:52:39 +0200 (CEST) Received-SPF: None (mail1-smtp-roc.national.inria.fr: no sender authenticity information available from domain of yallop@gmail.com) identity=pra; client-ip=74.125.82.52; receiver=mail1-smtp-roc.national.inria.fr; envelope-from="yallop@gmail.com"; x-sender="yallop@gmail.com"; x-conformance=sidf_compatible Received-SPF: Pass (mail1-smtp-roc.national.inria.fr: domain of yallop@gmail.com designates 74.125.82.52 as permitted sender) identity=mailfrom; client-ip=74.125.82.52; receiver=mail1-smtp-roc.national.inria.fr; envelope-from="yallop@gmail.com"; x-sender="yallop@gmail.com"; x-conformance=sidf_compatible; x-record-type="v=spf1" Received-SPF: None (mail1-smtp-roc.national.inria.fr: no sender authenticity information available from domain of postmaster@mail-wg0-f52.google.com) identity=helo; client-ip=74.125.82.52; receiver=mail1-smtp-roc.national.inria.fr; envelope-from="yallop@gmail.com"; x-sender="postmaster@mail-wg0-f52.google.com"; x-conformance=sidf_compatible X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ak4BAMTbhVBKfVI0imdsb2JhbABEhU0BRrsjCCMBAQEKCQ0HEgYjgiABAQEEEgIPBBkBGx0BAwwGBQsNAgImAgIhAQERAQUBHAYTIodPAQMPC51NCQOLWU+BbIEKhRwKGScNWYh1AQUMgRSJT2mFXYESA5I/gV2BVYspgy8WKYQS X-IronPort-AV: E=Sophos;i="4.80,632,1344204000"; d="scan'208";a="178427230" Received: from mail-wg0-f52.google.com ([74.125.82.52]) by mail1-smtp-roc.national.inria.fr with ESMTP/TLS/RC4-SHA; 23 Oct 2012 01:52:38 +0200 Received: by mail-wg0-f52.google.com with SMTP id fg15so2584845wgb.9 for ; Mon, 22 Oct 2012 16:52:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:content-transfer-encoding; bh=gqEqFaw2MtsgUGpMDkrKOJ4dzOBGR7PJxovRfT+Dno8=; b=PNUXa5d0tsNQ8f7D+0jl0tlDYJ1448YywEiKK/J7S42iOAW6yKwgx2qLqTWue1r7cR FDptniIXnsWBwu5ZlYu712NAmz813KiufpZ+PFslEypAdvSBjZzss20kthF/i+RquimP RYnWXtrHFOMvA5hftn72537SMQRxLhsvH8jN+USWVAUGiUfTQBDOxDnIe7OQatx4JrXJ OOXTf45P0Svp6KtXSW11NDyf6RNKrRwnhhWKv4rmwg3kYZJZsAwFMDC/CGkDg6ZKsIEY ezfz3sLiiPu2yd2pq7HFhQu3emLhID4aXetwXfhlSPDA69+kbkmahphJPsKdQeJ76VR8 OIHw== MIME-Version: 1.0 Received: by 10.216.139.104 with SMTP id b82mr6429290wej.24.1350949958601; Mon, 22 Oct 2012 16:52:38 -0700 (PDT) Received: by 10.194.58.101 with HTTP; Mon, 22 Oct 2012 16:52:38 -0700 (PDT) In-Reply-To: References: Date: Tue, 23 Oct 2012 00:52:38 +0100 Message-ID: From: Jeremy Yallop To: Philippe Veber Cc: caml users Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: Re: [Caml-list] Parameterizing a function with a thread monad On 22 October 2012 23:09, Philippe Veber wrote: > A couple of libraries, like pgocaml for instance, define a functor over a > (monadic) thread implementation, like in the following: > > module type Thread =3D sig > type 'a t > val return : 'a -> 'a t > val bind : 'a t -> ('a -> 'b t) -> 'b t > end > > module F(T : Thread) : sig > val v : string -> string T.t > end > > Is it possible to define F as a function (ie at the value level)? Yes! Mat=C3=ADas Giovannini has a blog post showing how to do just that: http://alaska-kamtchatka.blogspot.co.uk/2011/09/higher-order-fun.html