2
도관 내에서 발생하는 오류를 잡는 방법을 이해하려고합니다. 나는 콘딧에 catchC
을 적용함으로써, 나는 기분이 나쁠 때 재방송 할 새로운 도관을 만들 수 있다고 믿었습니다.도관의 오류를 복구 할 수 없습니다.
아래 예제에서 부울 값에 따라 사용자 정의 더미 예외가 발생하는 소스가 있습니다. 그 예외에 그 부울 리드의 값이 던져지는 처음 catchC
내부 그러나 핸들러 내가이 확신 (10 1에서 숫자를 산출) 반대 동작을 나타해야 새로운 도관
{-# LANGUAGE DeriveDataTypeable #-}
module Main where
import Data.Conduit
import qualified Data.Conduit.List as CL
import Control.Monad.IO.Class
import Control.Exception
import Data.Typeable
data MyException = MyException String
deriving (Show, Typeable)
instance Exception MyException where
listAsStream :: Bool -> Source IO Int
listAsStream val = if val then CL.sourceList [1..10] else throw $ MyException "Value"
conduitWhatever :: Sink Int IO()
conduitWhatever = awaitForever $ liftIO . print
main :: IO()
main = catchC (listAsStream False) handler $$ conduitWhatever
handler :: MyException -> Source IO Int
handler _= catchC (listAsStream True) handler
을 생산 catchC
이 어떻게 작동하는지 오해했습니다. 아무도 내가 잘못한 것을 설명 할 수 있습니까?
고맙습니다.