[英]Handling this specific Haskell exception
我了解在Control.Exception中 ,您需要evaluate
函數以確保表達式首先評估為某些內容,然后使用handle
函數處理異常。
請考慮以下代碼:
import Control.Exception
import System.Locale
import Data.Time
parseDay :: String -> String -> (Integer, Int, Int)
parseDay formatString dateString = toGregorian $ readTime defaultTimeLocale formatString dateString
上面是一些代碼,用於解析字符串中的日期,正如上面定義所明確指出的那樣。 這將返回類型(Integer, Int, Int)
。
因此,我正在使用以下代碼行來查看是否存在異常:
x = parseDay "%m" "-"
result = try (evaluate $ x) :: IO (Either SomeException (Integer, Int, Int))
在這種情況下,輸入錯誤,因此將引發以下異常:
( *例外:readsTime:錯誤的輸入“-”
但是結果如下:
右( *例外:readsTime:錯誤的輸入“-”
這是我無法理解的; 如我所見的所有示例所示,它應該為Left <error_message>
。 我不確定,這里正在懶惰地評估什么,以及為什么它不能按預期工作。
我認為evaluate
並沒有足夠深入地評估x
以達到異常,因此try
返回Right
結果,並且僅在打印result
時才真正評估異常。
嘗試更換$
在parseDay
與嚴格$!
看看是否可行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.