Ну, вы можете попробовать
foo :: String -> IO ()
foo x = do
if null x
then error "Oops!" else putStrLn "okay"
Или, если вы намереваетесь в конце концов обнаружить ошибку, тогда
import Control.Exception
data MyException = ThisException | ThatException
deriving (Show, Typeable)
instance Exception MyException
...
foo :: String -> IO ()
foo x = do
if null x
then throw ThisException else putStrLn "okay"
Часто есть более быстрые механизмы, которые вы можете использовать, например,возвращая значения, упакованные в тип Maybe или в другую структуру, описывающую ошибку.Кажется, что исключения лучше подходят для случаев, когда возврат сложных типов усложнил бы в противном случае многократное использование интерфейсов.