Received: from nldi16.nag.co.uk by nags2.nag.co.uk (4.1/UK-2.1)
	id AA19845; Sun, 17 Sep 95 18:45:58 BST
From: Peter Broadbery <peterb@uk.co.nag>
Date: Sun, 17 Sep 95 18:42:34 +0100
Message-Id: <3081.9509171742@nldi16.nag.co.uk>
Received: by nldi16.nag.co.uk (920330.SGI/NAg-1.0)
	id AA03081; Sun, 17 Sep 95 18:42:34 +0100
Subject: fixbug
By: PAB
Fixed: bug964.as
Apparently-To: ax-bugs@nag.co.uk

--* From postmaster%watson.vnet.ibm.com@yktvmv.watson.ibm.com  Thu May  4 11:37:12 1995
--* Received: from yktvmv-ob.watson.ibm.com by asharp.watson.ibm.com (AIX 3.2/UCB 5.64/930311)
--*           id AA26491; Thu, 4 May 1995 11:37:12 -0400
--* Received: from watson.vnet.ibm.com by yktvmv.watson.ibm.com (IBM VM SMTP V2R3)
--*    with BSMTP id 5007; Thu, 04 May 95 11:37:11 EDT
--* Received: from YKTVMV by watson.vnet.ibm.com with "VAGENT.V1.0"
--*           id <A.BRONSTEI.NOTE.YKTVMV.9394.May.04.11:36:55.-0400>
--*           for asbugs@watson; Thu, 04 May 95 11:37:11 -0400
--* Received: from inf.ethz.ch by watson.ibm.com (IBM VM SMTP V2R3) with TCP;
--*    Thu, 04 May 95 11:36:54 EDT
--* Received: from ru7.inf.ethz.ch (bronstei@ru7.inf.ethz.ch [129.132.12.16]) by inf.ethz.ch (8.6.10/8.6.10) with ESMTP id RAA21294 for <asbugs@watson.ibm.com>; Thu, 4 May 1995 17:23:08 +0200
--* From: Manuel Bronstein <bronstei@inf.ethz.ch>
--* Received: (bronstei@localhost) by ru7.inf.ethz.ch (8.6.8/8.6.6) id RAA22640 for asbugs@watson.ibm.com; Thu, 4 May 1995 17:23:09 +0200
--* Date: Thu, 4 May 1995 17:23:09 +0200
--* Message-Id: <199505041523.RAA22640@ru7.inf.ethz.ch>
--* To: asbugs@watson.ibm.com
--* Subject: [3] runtime bus error in lookup [lift.as][1.1]

--@ Bug Number:  bug964.as 
--@ Fixed  by:  PAB   
--@ Tested by:  none 
--@ Summary:    deal with 'If' in a with specially 

--------------------------------- lift.as -------------------------------
-- Bombs at runtime:
-- % axiomxl -Fx lift.as
-- % lift
-- Bus error
--
-- Note that this works ok if either
--       (i)  the conditional export is removed from Foo
--       (ii) (a:%) - (b:%):% is explicitely reimplemented inside Foo
--

#include "axllib.as"

Endo(R:BasicType): BasicType with {
	apply: (%, R) -> R;
	endo: (R -> R) -> %;
} == add {
	macro Rep == R -> R;

	sample:%		== per((r:R):R +-> r);
	endo(f:R -> R):%	== per f;
	(u:%) = (v:%):Boolean	== false;
	apply(f:%, r:R):R	== (rep f).r;
	(p:TextWriter) << (x:%):TextWriter	== p;
}


Foo(R:BasicType):AbelianGroup with {
	coerce:		R -> %;
	left:		% -> R;
	lift:		Endo R -> Endo %;
	if R has Ring then foo: % -> %;
} == add {
	macro Rep == Record(lhs:R, rhs:R);
	import from R, Rep;

	0:% == per [sample, sample];
	left(x:%):R	== rep(x).lhs;
	-(a:%):% == a;
	coerce(a:R):%	== per [a, a];
	(a:%) + (b:%):% == a;
	(a:%) = (b:%):Boolean == false;
	(port:TextWriter) << (a:%):TextWriter == port;
	lift(g:Endo R):Endo % == { endo {(f:%):% +-> { f - f; }} }

	if R has Ring then foo(a:%):% == a;
}		

macro Z == Integer;

import from Z, Foo Z, Endo Z, Endo Foo Z;

zro(q:Z):Z == q;
xx := 3::Foo Z;
ff := endo zro;
gg := lift ff;
gg xx;



