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 mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by sympa.inria.fr (Postfix) with ESMTPS id 4A6E87EF5E for ; Thu, 14 Jul 2016 11:08:04 +0200 (CEST) IronPort-PHdr: 9a23:TEyOWhZKIt8CNqdNUdv+JI7/LSx+4OfEezUN459isYplN5qZpMy7bnLW6fgltlLVR4KTs6sC0LuO9fy6EjRQqb+681k6OKRWUBEEjchE1ycBO+WiTXPBEfjxciYhF95DXlI2t1uyMExSBdqsLwaK+i760zceF13FOBZvIaytQ8iJ3pzxi7r5o82bSj4LrQL1Wal1IhSyoFeZnegtqqwmFJwMzADUqGBDYeVcyDAgD1uSmxHh+pX4p8Y7oGx48sgs/M9YUKj8Y79wDfkBVGxnYCgJ45ihlR7FQgGIrkkcW2MZ2lpiJy/iyTvXZLi2+nSh76JZ9Rnbd4WiTaI0UDKttfY2YBXsjyACPTMj/yfRh9Am34xBpxf0iBtk3I/SKJ+SMrJUZK7RcMkeQnUJCslWTDNABMaiKoEnEOcLe+pV+dqu72ASpAezUFH/TNjkzSVF0zqvhfU3 Authentication-Results: mail2-smtp-roc.national.inria.fr; spf=None smtp.pra=goswin-v-b@web.de; spf=Pass smtp.mailfrom=goswin-v-b@web.de; spf=None smtp.helo=postmaster@mout.web.de Received-SPF: None (mail2-smtp-roc.national.inria.fr: no sender authenticity information available from domain of goswin-v-b@web.de) identity=pra; client-ip=212.227.15.3; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="goswin-v-b@web.de"; x-sender="goswin-v-b@web.de"; x-conformance=sidf_compatible Received-SPF: Pass (mail2-smtp-roc.national.inria.fr: domain of goswin-v-b@web.de designates 212.227.15.3 as permitted sender) identity=mailfrom; client-ip=212.227.15.3; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="goswin-v-b@web.de"; x-sender="goswin-v-b@web.de"; x-conformance=sidf_compatible; x-record-type="v=spf1" Received-SPF: None (mail2-smtp-roc.national.inria.fr: no sender authenticity information available from domain of postmaster@mout.web.de) identity=helo; client-ip=212.227.15.3; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="goswin-v-b@web.de"; x-sender="postmaster@mout.web.de"; x-conformance=sidf_compatible X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A0A0AAA0VYdXhwMP49RctWCIGIF7hhkCgTc4FAEBAQEBAQEBEQEBAQgNCQkhL4IyBAESAYITAQUnEz8QCxgJJQ8FKCGIKAEaBLtVH4RbAQEBBwEBAQEjineHbIIvAQSZH4kNhUKJSwqFZpAZHoJQgVmKIwEBAQ X-IPAS-Result: A0A0AAA0VYdXhwMP49RctWCIGIF7hhkCgTc4FAEBAQEBAQEBEQEBAQgNCQkhL4IyBAESAYITAQUnEz8QCxgJJQ8FKCGIKAEaBLtVH4RbAQEBBwEBAQEjineHbIIvAQSZH4kNhUKJSwqFZpAZHoJQgVmKIwEBAQ X-IronPort-AV: E=Sophos;i="5.28,361,1464645600"; d="scan'208";a="226702105" Received: from mout.web.de ([212.227.15.3]) by mail2-smtp-roc.national.inria.fr with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 14 Jul 2016 11:08:03 +0200 Received: from frosties.localnet ([134.3.242.84]) by smtp.web.de (mrweb003) with ESMTPSA (Nemesis) id 0MI5yY-1bOArE2eEQ-003tip; Thu, 14 Jul 2016 11:08:03 +0200 Received: from mrvn by frosties.localnet with local (Exim 4.87) (envelope-from ) id 1bNcch-0005bW-JC; Thu, 14 Jul 2016 11:07:59 +0200 Date: Thu, 14 Jul 2016 11:07:59 +0200 From: Goswin von Brederlow To: "Hongbo Zhang (BLOOMBERG/ 731 LEX)" Cc: caml-list@inria.fr Message-ID: <20160714090759.GC21053@frosties> References: <5785631702290072003908A6_0_132218@p057> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <5785631702290072003908A6_0_132218@p057> User-Agent: Mutt/1.6.0 (2016-04-01) X-Provags-ID: V03:K0:t7mOxJ//7fG02mxuy0PFVsH3YD68tkiUScQE9y8kzw4DHEGUOvl MEBsLAYfZvpF0PPGZefcXQikQ/qohMW6RAXoOqZiTWfESTXtl+LtrKRqCXogSMvMbNWDcto ia6pRQWEIJvV6jtaq0Qg1F/o3XH+TTJFye4NZJypXrekpPFtjf6R7yV8dhyyVvKLJWpthy6 kWBXahqEFEQE6AJDyNZ8w== X-UI-Out-Filterresults: notjunk:1;V01:K0:nx4lO2S5rh8=:gHcMFx4abkjRyYFAsUTNxm +p2up6DgvVeWfWzXmZ+0z/AdtlWYrvusiDERhIiVnet4mU0rZIciNqft+NOtK37EgBa/HLp2N APUJagv4zN26vaiUKXMhNIkB9bBej2Qqn5m8MZNuIq+McjwUPrhph1pnQQFWQ+GBBXQZ8iMHX zrjcRO6i8WnxOeW+2upjUaitbEfyq2zDmSWIChn1+If+RwbRhu3RmlGRGfyaVihOnuEyxqMI8 /8I6g2A8BKB0G5/DAYXf0K3ZtJ3UVcYIEvHhecXNFyVrbGiqCE9tb2LbcGadLbt1W2cmTXOqX wQUoE3llsuhFsvSejnyCv+M/IyAkQ8DoCZkd7lLCDoAT5wTeIGO2IChj6pFMLLpiF1o5N/Xog mTtb5Wx3hj9TUKrwQ/sQps8NbWDfzGR+R0dTmqpBuL9YYZnaBGQ2ZPgC7P2BeYsJvHynNSvou AfjSPAxoKvXF1a9r7iXoIPFt3ZkYmHCLtLF1MxyyafzCjGid0AQKGNqABviGj5PTvaR8haW0Q EZqYX7FhAmmCyaFYaruykAuqcejulJohuyn0c9ixhk8Qk6pVqx3FGAk2gd0bNrEF3WcdTIhH0 h/bTyFhHh169LD2XC3K9PPbR+gdjVsdRJh/YfLLEJNvVxmEd9n4oeRQTEUTZwA2A9sCSGeeiq UHAcyb9dPsKseqsD3iHbsZBamZ+YIun0eg8VO+Bh+swYhaor/KIXIiBnYrnO/FmPUIpxZKTZ7 jncL/tlQ2dDK1wj+QWUeMIGIHlFEybz1EA8sOG2rA8EfWZdusyIeHyLrfOY= Subject: Re: [Caml-list] question: restrictions on `let rec` On Tue, Jul 12, 2016 at 09:37:27PM -0000, Hongbo Zhang (BLOOMBERG/ 731 LEX) wrote: > Hi all, > I have a question simplified as below: > > let rec fib = fun x -> fib (x - 1);; > val fib : int -> 'a = > # let rec fib = (Obj.magic (fun x -> fib (x - 1)) : int -> 'a);; > Characters 15-47: > let rec fib = (Obj.magic (fun x -> fib (x - 1)) : int -> 'a);; > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > Error: This kind of expression is not allowed as right-hand side of `let rec' > > I know `fib` is a legal expression, is there any way to work around it? > Thanks -- Hongbo The problem is in the evaluation order: let rec fib = fun x -> fib (x - 1);; is a function that will be evaluated when a parameter is passed. At that later date "fib" is well defined. let rec fib = (Obj.magic (fun x -> fib (x - 1)) : int -> 'a);; Here fib is a value and Obj.magic will be evaluated right there. At this point "fib" is not yet well defined, you are still defining it. "fib" is not legal there. What you have to do is make it a function again: # let rec fib = fun x -> (Obj.magic (fun x -> fib (x - 1)) : int -> 'a) x;; val fib : int -> 'a = MfG Goswin