--* From postmaster%watson.vnet.ibm.com@yktvmv.watson.ibm.com  Mon Feb 21 08:18:06 1994
--* Received: from yktvmv.watson.ibm.com by leonardo.watson.ibm.com (AIX 3.2/UCB 5.64/4.03)
--*           id AA15537; Mon, 21 Feb 1994 08:18:06 -0500
--* X-External-Networks: yes
--* Received: from watson.vnet.ibm.com by yktvmv.watson.ibm.com (IBM VM SMTP V2R3)
--*    with BSMTP id 0019; Mon, 21 Feb 94 08:31:49 EST
--* Received: from YKTVMV by watson.vnet.ibm.com with "VAGENT.V1.0"
--*           id <A.BRONSTEI.NOTE.YKTVMV.7741.Feb.21.08:31:48.-0500>
--*           for asbugs@watson; Mon, 21 Feb 94 08:31:49 -0500
--* Received: from neptune.ethz.ch by watson.ibm.com (IBM VM SMTP V2R3) with TCP;
--*    Mon, 21 Feb 94 08:31:47 EST
--* Received: from rutishauser.inf.ethz.ch (rutishauser-gw.inf.ethz.ch [129.132.101.41]) by neptune.ethz.ch (8.6.5/8.6.5) with SMTP id OAA00578 for <asbugs@watson.ibm.com>; Mon, 21 Feb 1994 14:31:45 +0100
--* From: Manuel Bronstein <bronstei@inf.ethz.ch>
--* Date: Mon, 21 Feb 94 14:31:44 +0100
--* Message-Id: <9402211331.AA19913@rutishauser.inf.ethz.ch>
--* Received: from vinci.inf.ethz.ch.rutishauser by rutishauser.inf.ethz.ch id AA19913; Mon, 21 Feb 94 14:31:44 +0100
--* To: asbugs@watson.ibm.com
--* Subject: [2] export not found when using add chains [bugrunt.as][33.2]

--@ Fixed  by:  PAB   Mon Jun 20 23:57:31 EDT 1994 
--@ Tested by:  fix579.as 
--@ Summary:    seems to work ok now 

------------------------------- bugrunt.as ----------------------------------
-- peano [/u/manuel/a#] 228> asharp -r bugrunt.as
--
-- 1 ?
-- $1 ?$
-- 1 \alpha
-- Looking for 699349070 with code 264202207
-- Export not found

#include "aslib.as"

Symbol: BasicType with {
	symbol:  String -> %;
} == String add {
	macro Rep == String;
	symbol(s:String):% == per s;
}

TeXEquation(T:BasicType): with {
	math: (OutPort, T) -> OutPort;
} == add {
	math(p:OutPort, x:T):OutPort == p("$")(x)("$");
}

FooCat(F:BasicType):Category == BasicType with { foo: F -> % }

Foo(F:Ring): FooCat F with {
	apply: (OutPort, %, Symbol) -> OutPort;
} == add {
	macro Rep == F;
	import Rep;
	import Integer;

	sample:% == foo 1;
	foo(c:F):% == per c;
        (x:%) = (y:%):Boolean == rep x = rep y;
	apply(p:OutPort, x:%, v:Symbol):OutPort == p(rep x)(" ")(v);

        apply(p:OutPort, x:%):OutPort == {
                import String; import Symbol;
                apply(p, x, symbol "?");
        }
}

Bar(F:Ring, x:Symbol): FooCat F == Foo F add {
	macro Rep == Foo F;
	import Rep;
	apply(p:OutPort, q:%):OutPort == apply(p, rep q, x);
}

main():OutPort == {
	import Symbol; import Integer;
	macro FOO == Foo Integer;
	macro BAR == Bar(Integer, symbol "\alpha");
	import FOO; import BAR;
	import TeXEquation FOO; import TeXEquation BAR;

	-- this is ok
	a:FOO := foo 1;
	print()(a)();
	math(print, a);
	-- this isn't
	b:BAR := foo 1;
	print()(b)();
	math(print, b);
}

main()
 
