On 2004 September 19 Sunday 13:40, Andrew Harris wrote: > handleSeeRecord :: [SeeObjInfo_type] -> RobotState -> IO (RobotState, ()) > handleSeeRecord seeobjlist p = do flaglist <- return (morphToList > flagFinder seeobjlist) > balllist <- return (morphToList > ballFinder seeobjlist) > friendlist <- return (morphToList > friendFinder seeobjlist) > foelist <- return (morphToList > foeFinder seeobjlist) > Robot e <- return (assign_flags > (flagSpread flaglist)) > Robot f <- return (assign_ball balllist) > Robot g <- return (assign_friends > friendlist) Robot h <- return (assign_foes foelist) (r', ()) <- e p > (r'', ()) <- f r' > (r''', ()) <- g r'' > h r'''
What you're looking for is something like handleSeeRecord :: [SeeObjInfo_type] -> Robot () handleSeeRecord seeobjlist = do let flaglist = morphToList flagFinder seeobjlist let balllist = morphToList ballFinder seeobjlist let friendlist = morphToList friendFinder seeobjlist let foelist = morphToList foeFinder seeobjlist assign_flags (flagSpread flaglist) assign_ball balllist assign_friends friendlist assign_foes foelist This uses the 'do' notation with the Robot monad, whose operations are closer to what the code is doing than the IO monad. Also, replacing 'return' with 'let' removes the unnecessary reference to the monad. _______________________________________________ Haskell-Cafe mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell-cafe