  
  def factaux [n:Int count:Int ch:^Int] =
      
      (new br:^Bool

        ==![n 0 (rchan br)

       | br?b =
 
            if b then ch!count
                
                 else  (new enneminusone:^Int
                        
                        new prod:^Int

                            -![n 1 (rchan enneminusone)]

                            *![n count (rchan prod)                               
                            
                           | enneminusone?m = 
                             
                             prod?p =

                             factaux![m p ch]
         )
  

  def fact [n:Int ch:^ch] =

      factaux![n 1 ch]




