4
Parallel and Concurrent Programming in Haskell에서 bracket
기능을 보면 : 예외가 발생할 경우는 이해`bracket` 기능
bracket :: IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket before after during = do
a <- before
c <- during a `onException` after a
after a
return c
는 왜 after
기능은 한 번만 호출됩니까? 즉, 나는 예외의 경우에 두번 명백한 실행 after a
에 혼란스러워합니다.
λ: >data MyException = MyException deriving Show
λ: >instance Exception MyException
λ: >let e = return MyException :: IO MyException
λ: >bracket e (const $ putStrLn "clean up!") return
clean up!
MyException
내 생각에'onException'은'after a'를 실행할 것입니다. 그러나 예외를 "re-raises"하여 함수의 나머지 부분을 막지 만 이것을 검증하지는 않았습니다. 파이썬과 마찬가지로'try-exception' 블록을 가지고 있지만'except : print (foo); 일부 명령을 한 후에 예외를 재발행하라. –