私はHaskellサーバーからJSONデータを取得しようとしていますが、一般的なAffjaxだけでなくResponderableインスタンスにも問題があります。私はData.Argonaut.Generic.Aeson(GA)でEncodeJson + DecodeJsonを定義しましたが、Responderableインスタンスでそれをどのように適合させるかを理解できず、fromResponse関数です。Purescript再利用Argonaut JSONデコードfor Affjax Respondable
エラー "私はタイプ外国人とタイプ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を使用しています。ありがとう!
decodeJson :: forall a. Json -> Either String a
がEither
ではなくF
を使用して戻すには:
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
それは恐ろしいです。ここで何が起こっているのかを理解するのにもう時間がかかりますが、うまくいきます。ありがとう! – sportanova
これをライブラリとして持っているとよいでしょう。ありがとう! – gueux