这是我的问题
我正在使用 Control.Exception.catch 进行异常处理,它具有以下类型:(从 Hoogle 中剔除)
catchSource
:: Exception e
=> IO a
The computation to run
-> (e -> IO a)
Handler to invoke if an exception is raised
-> IO a
这是我将传递给我的处理函数的构造函数
> data JobException = PreProcessFail
> | JobFail
> | ChartFail
> deriving (Show, Typeable)
> instance Control.Exception JobException
这是现在的 Handler 函数:
> exceptionHandler :: JobException -> IO ()
> exceptionHandler exception = do
> writeFile "testException.txt" ("caught exception " ++ show exception )
我将用它来做一些日志记录。我需要记录的信息将在 JobState 类型的记录中
> type JobState = MVar ProcessConfig
> data ProcessConfig = PConfig { model :: ServerModel
> , ipAddress :: String
> , cookie :: Cookie
> } deriving Show
因此,由于我需要一个强制具有我上面提到的类型的处理程序,并且我需要一个 JobState,我认为答案是重写 JobException 以在其中隐藏一个 JobState。这似乎是 GADT 的工作!我不确定,这是新领域。
我对吗?我可以用 GADT 解决这个问题吗?有人可以提供如何开始构建的线索吗?我一直在阅读的教程假设您正在尝试解决比我所得到的更复杂的问题。
如果我错了,有人可以指出我正确的方向吗?
更新:我从1中了解了动态类型,并在此后不久发现了 Data.Dynamic。逐渐回暖?