これが私の問題です
次のタイプの例外処理に 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
現在のハンドラー関数は次のとおりです。
> 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 を見つけました。暖かくなる?