. -, IO, Control.Exception.evaluate. evaluate :: a -> IO a, , . - .
- , . handle, Control.Exception.try, try :: Exception e => IO a -> IO (Either e a), , . , , , , try , . , , ( ), try .
error ErrorCall,
sd :: BS.ByteString -> IO Bool
sd bs = do
ie <- try $ evaluate $ Excel.isExcel bs
either (const False) (id) (ie :: Either ErrorCall Bool)
, , isExcel True. toExcel either, .
,
a `seq` a
a. , " , () a, () a ". , . evaluate.