Haskell サーバーから JSON データをフェッチしようとしていますが、Respondeable インスタンスだけでなく、一般的な Affjax にも問題があります。EncodeJson + DecodeJson を Data.Argonaut.Generic.Aeson (GA) で定義しましたが、それを Respondeable インスタンスに適合させる方法がわかりません。それは fromResponse 関数です。
「Foreign 型と Json 型を一致させることができませんでした」というエラーが表示されますが、手動で何かを作成しなくても、decodeJson インスタンスを再利用できますか? おそらく IsForeign インスタンスを作成することによって、しかしその中で GA.decodeJson を使用することでしょうか? どうすればいいのかわかりません。https://github.com/purescript/purescript-foreign/blob/master/examples/Complex.pursで手動で行う方法を見てきましたが、Haskell JSON 出力と一致させる必要がある複雑な型があります。手動で行うのは非常に面倒です。
私は purescript 10.7、Affjax 3.02、Argonaut 2.0.0、Argonaut-generic-codecs 5.1.0 を使用しています。ありがとう!
testAffjax :: forall eff. Aff (ajax :: AJAX | eff) (Answer)
testAffjax = launchAff do
res <- affjax $ defaultRequest { url = "/", method = Left GET }
pure res.response
data Answer = Answer {
_answer :: String
, _isCorrect :: Boolean
, _hint :: String
}
{- PROBLEM -}
instance respondableAnswer :: Respondable Answer where
responseType = Tuple Nothing JSONResponse
fromResponse = GA.decodeJson {- Error here -}
derive instance genericAnswer :: Generic Answer
instance showAnswer :: Show Answer where
show = gShow
instance encodeAnswer :: EncodeJson Answer where
encodeJson = GA.encodeJson
instance decodeAnswer :: DecodeJson Answer where
decodeJson = GA.decodeJson