
Erik, Ok, I need some conceptual help on this one. If the action “in" the catch is not evaluated, I would think the catch itself cannot be fully evaluated. Once IO demands the value from the work “in” the catch, how can it escape the catch? To me it seemed like the exception triggered the death of the wx callback without an evaluation of the catch, like the runtime let it escape. Mike
On Oct 8, 2015, at 7:41 AM, Erik Hesselink
wrote: Perhaps the value you're calculating is lazily computed, so the exception occurs only when using it, and by then you're already outside the catch? Try forcing things with `seq` or `deepseq` and see if that helps in catching the exception.
Erik
On 8 October 2015 at 15:26, Michael Jones
wrote: I’m having trouble with an exception that won’t catch and looking for suggestions. Basically, a “fail” inside a “catch” inside a unsafeIOToSTM, inside a wx callback, trying to catch SomeException or IOException.
Details:
I’m using Text.Regex.PCRE
and the exception comes from a “fail" in unwrap:
unwrap :: (Show e) => Either e v -> IO v unwrap x = case x of Left err -> fail ("Text.Regex.PCRE.String died: "++ show err) Right v -> return v
The catch is in this function, catching SomeException:
filterTableRow _ record fils = do s <- showRecord record vs <- Control.Exception.catch ( return $ map (\(fil,col) -> let fil' = if fil == "" then "^" else fil in ((splitOn "," s)!!(fromIntegral (col+1))) =~ fil') (elems fils) ) ((\e -> do return $ replicate (length $ elems fils) False) :: SomeException -> IO [Bool]) return $ foldl (.&.) True vs
filterTableRow is called from an unsafeIOToSTM:
unsafeIOToSTM $ filterTableRow gridData row’ fil
which is called from a wx callback from a button press
Before I added the catch, the application was working for over a year, so there is no general problem, All I added was the catch.
Adding -xc to the ghc runtime shows the error:
*** Exception (reporting due to +RTS -xc): (THUNK_1_0), stack trace: Text.Regex.PCRE.String.matchTest, called from Text.Regex.PCRE.String.unwrap, … user error (Text.Regex.PCRE.String died: (4,"unmatched parentheses"))
Which indicates the text in unwrap, as if the exception is not caught. I have tried to catch it as IOException, and SomeException.
Any ideas why it is not caught or some way to debug it? _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe