From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail4-relais-sop.national.inria.fr (mail4-relais-sop.national.inria.fr [192.134.164.105]) by walapai.inria.fr (8.13.6/8.13.6) with ESMTP id p9QK7LsT002812 for ; Wed, 26 Oct 2011 22:07:21 +0200 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AlECAKRnqE4SCRkNmWdsb2JhbABCmkePBSIBAQEBAQgLCwcUJYIcgiOdJJcFiQSIagSmBQ X-IronPort-AV: E=Sophos;i="4.69,411,1315173600"; d="scan'208";a="114870499" Received: from dmz-mailsec-scanner-2.mit.edu ([18.9.25.13]) by mail4-smtp-sop.national.inria.fr with ESMTP; 26 Oct 2011 22:07:15 +0200 X-AuditID: 1209190d-b7f726d0000008d1-da-4ea86872cf83 Received: from mailhub-auth-3.mit.edu ( [18.9.21.43]) by dmz-mailsec-scanner-2.mit.edu (Symantec Messaging Gateway) with SMTP id 00.F4.02257.27868AE4; Wed, 26 Oct 2011 16:07:14 -0400 (EDT) Received: from outgoing.mit.edu (OUTGOING-AUTH.MIT.EDU [18.7.22.103]) by mailhub-auth-3.mit.edu (8.13.8/8.9.2) with ESMTP id p9QK7E6s018420 for ; Wed, 26 Oct 2011 16:07:14 -0400 Received: from localhost (CONTENTS-VNDER-PRESSVRE.MIT.EDU [18.9.64.11]) (authenticated bits=0) (User authenticated as jfc@ATHENA.MIT.EDU) by outgoing.mit.edu (8.13.6/8.12.4) with ESMTP id p9QK7CMd028545 for ; Wed, 26 Oct 2011 16:07:13 -0400 (EDT) Message-Id: <201110262007.p9QK7CMd028545@outgoing.mit.edu> To: caml-list@inria.fr X-Mailer: MH-E 8.2; nmh 1.3; GNU Emacs 23.1.1 Date: Wed, 26 Oct 2011 16:07:12 -0400 From: John Carr X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpikeLIzCtJLcpLzFFi42IR4hTV1i3KWOFnMGmpnsWnHRtYHBg9Jr04 xBLAGMVlk5Kak1mWWqRvl8CVMWPbTZaCfywVh17/ZG9gfM/cxcjJISFgIvH72TVGCFtM4sK9 9WxdjFwcQgL7GCVeH9nABJIQEjgJ5Px2hUjMZJL49esJWAevgJXE7M5jYLYIUPes+VdYQGxh AQ2JA8uWQ03Vlfi4aCY7iM0ioCqxf9lXNhCbTUBW4lF7F+MERu4FjAyrGGVTcqt0cxMzc4pT k3WLkxPz8lKLdI30cjNL9FJTSjcxgr0qybuD8d1BpUOMAhyMSjy8s5xX+AmxJpYVV+YeYpTk YFIS5dVMAQrxJeWnVGYkFmfEF5XmpBYfYpTgYFYS4V3gA5TjTUmsrEotyodJSXOwKInzFu5w 8BMSSE8sSc1OTS1ILYLJynBwKEnwvk8HahQsSk1PrUjLzClBSDNxcIIM5wEafh+khre4IDG3 ODMdIn+KUVFKnPc7SEIAJJFRmgfXC4u6V4ziQK8I8z4CqeIBRixc9yugwUxAg5XZl4IMLklE SEk1MGqq6Xp+El/1fP0u1tqAA667Fz/8eaNwsWHr3qzmkgCti8tvFD46qptY8nZq7lc/2/OM uzw3Wq5Kj5vs/7mn4+7JzV6nr641865rfbrCxqMqkTdou9yf57ZRIZND1s6YsMZ5VcES67fb 9fP3Gc7YafT96txda9U3hn2sl49oYbSIFcpcqhXyKE+JpTgj0VCLuag4EQCUEcs3lQIAAA== Subject: [Caml-list] Defeating the value restriction Can I rewrite this function to have the type I requested instead of failing type checking? let f : ('a * 'a -> 'a) -> int * bool = fun x -> x (0,1), x (true,false) I assume the type error is caused by the value restriction. The parameter (x) becomes monomorphic when applied, so it can not be applied to both types (int*int) and (bool*bool). A top level syntactic function let x : ('a * 'a -> 'a) = fun (a,b) -> a retains its original, generalized type under similar circumstances. My real example that fails type checking is more complicated. I believe the root cause is the same. --John Carr (jfc@mit.edu)