簡體   English   中英

處理此特定的Haskell異常

[英]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))

在這種情況下,輸入錯誤,因此將引發以下異常:

*例外:readsT​​ime:錯誤的輸入“-”

但是結果如下:

右( *例外:readsT​​ime:錯誤的輸入“-”

這是我無法理解的; 如我所見的所有示例所示,它應該為Left <error_message> 我不確定,這里正在懶惰地評估什么,以及為什么它不能按預期工作。

我認為evaluate並沒有足夠深入地評估x以達到異常,因此try返回Right結果,並且僅在打印result時才真正評估異常。

嘗試更換$parseDay與嚴格$! 看看是否可行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM