On Fri, Dec 21, 2001 at 10:21:06AM -0000, Simon Marlow wrote: > > > If I want to give warnings when doing something and I don't care too > > much about the order they appear in, can I use this? > > > > foo x = if success x then Just x > > else warn "Working out x went wrong" Nothing > > > > warn :: String -> a -> a > > warn s x = unsafePerformIO (hPutStrLn stderr s) `seq` x > > This is what IOExts.trace is for, BTW.
Doh - I associate that with debugging and it never even occurred to me! > > warnings interspersed? > > It is possible to get warnings interspersed if you write something like > > warn ("abc" ++ warn "foo" "def") Ah, yes, OK, thanks. > > hugs and ghci only seem to print the first warning, but ISTR similar > > problems happen with threads and got the impression that they were in > > the wrong. > > Are you sure that laziness and/or optimisation aren't to blame for only > getting a single warning? Given that you say Hugs also produces the > same result, it sounds like a laziness issue. Sorry, I meant "hugs and ghci only seem to print the warning the first time I run the program", e.g. with module Main where import IOExts main :: IO() main = trace "foo" (putStrLn "bar") in hugs: [...] Type :? for help Main> main foobar Main> main bar Main> main bar Main> main bar and in ghci: Skipping Main ( q.lhs, ./q.o ) Main> main foo bar Main> main bar Main> main bar Main> main bar Main> Thanks again Ian _______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell