3

私は通常、独自のToJSONandFromJSONインスタンスを作成しますderiveJSONが、非常に単純だったので、型を使用することにしました。

data Priority = HIGH | MEDIUM | LOW deriving Show
$(deriveToJSON id ''Priority)

main = BS.putStrLn . encode $ HIGH

JSON派生が列挙型を文字列として書き出すだけだと思っていたでしょう。代わりに、それはハッシュの鍵です!{"HIGH":[]}

なぜこれがデフォルトの動作なのですか?

4

1 に答える 1

5

これは、あなたのような合計型と のようなより洗練された型をaeson区別しないためです。基本的に、これらの型はそれぞれ「 n 個の引数を持つ単なるデータ コンストラクター」です。Prioritydata PriorityAndDetails = HIGH { highReason :: Text, alertType :: Alert } | MEDIUM { personResponsible :: Person } | LOW

In Priority HIGHMED、およびLOWは、それぞれ引数がゼロの単なるデータ コンストラクターです。、、およびはそれぞれPriorityAndDetails HIGH、それぞれ 2、1、および 0 の名前付き引数をいくつか持つ単なるデータ コンストラクターです。MEDLOW

一般に、初期のプロトタイピング以外の目的で、独自のインスタンスToJSONを作成する必要がある可能性が高いことがわかりました。FromJSON

于 2013-08-08T03:24:30.350 に答える