は、このデータを考える:引数なしのコンストラクタが複数ある代数データ型のToJSON/FromJSONエントリの作成方法は?
data A1 = A1 | A2 | A3
は、どのように私はそれのためのインスタンスを作成することができますか?
instance ToJSON A1 where
toJSON = ???
instance FromJSON A1 where
parseJSON = ???
それは、単一のコンストラクタだった場合、私はそれを行うことができると思いますが、私は、任意のパラメータを受け入れない複数のものでそれを行う方法を見つけ出すことはできません。
UPDATE: 各コンストラクタについて、私はこれらのエラーを持っている:toJSON
とparseJSON
関数は、引数それぞれを取る
my-app/src/Lib.hs:54:32:
No instance for (ToJSON a1) arising from a use of ‘.=’
The type variable ‘a1’ is ambiguous
Note: there are several potential instances:
instance ToJSON UUID -- Defined in ‘Data.UUID.Aeson’
instance ToJSON MyType -- Defined at src/Lib.hs:53:10
instance ToJSON MyType2 -- Defined at src/Lib.hs:70:10
In the expression: "tag" .= "A1"
In the first argument of ‘object’, namely ‘["tag" .= "A1"]’
In the expression: object ["tag" .= "A1"]
my-app/src/Lib.hs:54:35:
No instance for (Data.String.IsString a1)
arising from the literal ‘"A1"’
The type variable ‘a1’ is ambiguous
Note: there are several potential instances:
instance Data.String.IsString Value
-- Defined in ‘aeson-0.9.0.1:Data.Aeson.Types.Internal’
instance (a
~ bytestring-0.10.6.0:Data.ByteString.Internal.ByteString) =>
Data.String.IsString
(attoparsec-0.13.0.1:Data.Attoparsec.ByteString.Internal.Parser a)
-- Defined in ‘attoparsec-0.13.0.1:Data.Attoparsec.ByteString.Char8’
instance Data.String.IsString
bytestring-0.10.6.0:Data.ByteString.Builder.Internal.Builder
-- Defined in ‘bytestring-0.10.6.0:Data.ByteString.Builder’
...plus 13 others
In the second argument of ‘(.=)’, namely ‘"A1"’
In the expression: "tag" .= "A1"
In the first argument of ‘object’, namely ‘["tag" .= "A1"]’
JSONへの変換は、あなた次第ですが、通常私は、コンストラクタを示すタグのいくつかの並べ替えを期待しています。 'toJSON A1 - >" {'tag': 'A1'} ''などとなります。 'インスタンスToJSON A1 'の –