hello cafe,
 
  I just want to do cursion to a fixpoint in an IO function, I write sth. like this,
 
handle_ar::(Set String,Set String)->FilePath-> IO (Set String, Set String)
handle_ar (def,undef) ar=do
  let gs = def
      gu = undef
  syms <- liftM (map (\x -> (symb x, x))) $ defined_syms ar
  usyms <- liftM (map (\x -> (symb x, x))) $ undefined_syms ar
  mfix (\(gs,gu) -> do
           case find_obj gu usyms of Nothing -> return (gs,gu)
                                     Just z ->
                                       do
                                         let
                                           fout = fromList . map fst . filter ((== (objf z)) . objf . snd)
                                           ls = fout syms
                                           lu = fout usyms
                                         handle_obj_ar (gs,gu) (ls,lu))
What I want to express is:
 
gs and gu are initiliazed to def and undef, then do recursion until "find_obj gu usyms" is nothing, i.e, (gs,gu) reaches a fixpoint (suppose handle_obj_ar always change the pair).
 
I am not sure I am on the right track since there is no room for def and undef stand in the function.
 
Anyone can help?
 
thanks a lot.

Gang