some slight updates in ImpException.hs check out the behaviour of exceptions start hugs load ImpException.hs :l ImpException.hs Reading file "ImpException.hs": Hugs session for: /usr/share/hugs98/lib/Prelude.hs ImpException.hs Main> rundisplay prog7 "x" N 3 Main> rundisplay prog2 "x" N 2 Consider prog2 :: Cmd prog2 = Handle "error" (Assign "x" (Val (N 2))) (Seq (Assign "x" (Val (N 3))) (Raise "error")) -- (handle "error" = x:=2 -- in x:=3; raise "error") prog7 :: Cmd prog7 = Handle "error" (Assign "x" (Val (N 2))) (Seq (Raise "error") (Assign "x" (Val (N 3)))) -- (handle "error" = x:=2 -- in raise "error"; x:=3) After we raise the "error" exception (i.e. we execute the corresponding handler routine), we continue with the next statement. Here, x:=3