2

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
4

1 に答える 1