run ( def fib [n:Int r:!Int] =
	( new br:^Bool
        	( <=![n 1 (rchan br)]
          	| br?b =
              		if b then
                		r!1
              		else
				( new nr1:^Int
				  new nr2:^Int
				  new fib1:^Int
				  new fib2:^Int
                   		  ( -![n 1 (rchan nr1)]
				  | -![n 2 (rchan nr2)]
				  | nr1?nMinus1 = 
                       			(new fr1:^Int
                         			( fib![nMinus1 fr1]
                         			| fr1?f = fib1!f 
        					)
					)
                       		| nr2?nMinus2 = 
                       			(new fr2:^Int
                         			( fib![nMinus2 fr2]
                         			| fr2?f = fib2!f 
        					)
					)
				| fib1?fi1 = fib2?fi2 = +![fi1 fi2 (rchan r)]
				  )
				)
		)
	)
      fib![8 printi]
    )
