--* From postmaster%watson.vnet.ibm.com@yktvmv.watson.ibm.com  Wed Nov 23 08:57:37 1994
--* Received: from yktvmv-ob.watson.ibm.com by asharp.watson.ibm.com (AIX 3.2/UCB 5.64/930311)
--*           id AA15393; Wed, 23 Nov 1994 08:57:37 -0500
--* Received: from watson.vnet.ibm.com by yktvmv.watson.ibm.com (IBM VM SMTP V2R3)
--*    with BSMTP id 2523; Wed, 23 Nov 94 08:57:44 EST
--* Received: from YKTVMV by watson.vnet.ibm.com with "VAGENT.V1.0"
--*           id <A.BRONSTEI.NOTE.YKTVMV.9345.Nov.23.08:57:43.-0500>
--*           for asbugs@watson; Wed, 23 Nov 94 08:57:43 -0500
--* Received: from inf.ethz.ch by watson.ibm.com (IBM VM SMTP V2R3) with TCP;
--*    Wed, 23 Nov 94 08:57:42 EST
--* Received: from vinci.inf.ethz.ch (bronstei@vinci.inf.ethz.ch [129.132.12.46]) by inf.ethz.ch (8.6.9/8.6.9) with ESMTP id OAA20434 for <asbugs@watson.ibm.com>; Wed, 23 Nov 1994 14:57:33 +0100
--* From: Manuel Bronstein <bronstei@inf.ethz.ch>
--* Received: (bronstei@localhost) by vinci.inf.ethz.ch (8.6.8/8.6.6) id OAA07941 for asbugs@watson.ibm.com; Wed, 23 Nov 1994 14:57:29 +0100
--* Date: Wed, 23 Nov 1994 14:57:29 +0100
--* Message-Id: <199411231357.OAA07941@vinci.inf.ethz.ch>
--* To: asbugs@watson.ibm.com
--* Subject: [2] Conditional categories produce runtime error

--@ Fixed  by:  SSD   Wed Dec 7 10:55:23 EST 1994 
--@ Tested by:  none 
--@ Summary:    Type inference fixes since v0.37.0 have fixed this bug. 

-- Command line: asharp -Fx condcat.as
-- Version: 0.37.0
-- Original bug file name: condcat.as

-------------------------- condcat.as -----------------------
--
-- Conditional categories produce problems at runtime:
--
-- % asharp -Fx condcat.as
-- % condcat
-- Looking in MyType(SingleInteger) for foo with code 248183656
-- Export not found
--

#include "aslib.as"

Foo: Category == with { foo: % -> % };

Bar(R:BasicType): Category == BasicType with {
	coerce: R -> %;
	if R has Foo then Foo;
}

MyType(R:BasicType): Bar R == R add {
	macro Rep == R;

	coerce(x:R):% == per x;
	if R has Foo then foo(x:%):% == x;
}

import from SingleInteger;

p := 4::MyType(SingleInteger);
print << p << newline;
 
