Пользовательская запись для преобразования ключа json в Haskell с использованием библиотеки Aeson

Код ниже не работает для меня. Может ли кто-нибудь объяснить, как решить и избежать ошибок ниже в Haskell

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE DeriveGeneric #-}

module Test where

import GHC.Generics
import Data.Aeson.Types
import Data.Aeson

data Person = Person { personId :: Int , personName :: String} deriving (Show, Generic)

instance ToJSON Person where
    toJson p = [
            "id" .= personId p,
            "name" .= personName p
        ]

instance FromJSON Person

Я получаю следующую ошибку. Я не могу понять здесь проблему.

Prelude> :load src/User/Test
[1 of 1] Compiling Test             ( src\User\Test.hs, interpreted )

src\User\Test.hs:13:5: error:
    `toJson' is not a (visible) method of class `ToJSON'
Failed, modules loaded: none.

person yantrakaar    schedule 26.11.2017    source источник
comment
Я считаю, что это простая опечатка, это должно быть toJSON вместо toJson   -  person epsilonhalbe    schedule 26.11.2017
comment
Спасибо. Я этого не заметил. Однако ошибка сбивает с толку. Исходя из ООП, я думал, что невидимость означает, что метод не отображается вне модуля.   -  person yantrakaar    schedule 26.11.2017


Ответы (1)


Имя метода toJSON, а не toJson. Идентификаторы чувствительны к регистру в Haskell. Вы можете найти это в документации aeson. для ToJSON класса.

person Jon Purdy    schedule 26.11.2017