使用newtype内部类型的实例自动派生到JSON / fromJSON

时间:2017-04-14 21:35:15

标签: haskell aeson

在我的代码中,我使用了很多newtype声明,例如:

newtype PersonName = PersonName { personName :: Text }
newtype PetName = PetName { petName :: Text }

(实际上我使用镜头来避免访问器功能的繁琐名称。)

但是,如果我自动从ToJSONFromJSON派生实例,则生成的JSON将采用以下格式:

{ "personName": "The person name" }
{ "petName": "The pet name" }

有没有办法避免为上面的ToJSON声明FromJSONnewtype的琐碎实例的样板,这样生成的JSON对象将是形式:

"The person name"
"The pet name"

2 个答案:

答案 0 :(得分:2)

使用unwrapUnaryRecords时,我需要将选项True设置为deriveJSON

import           Data.Aeson
import           Data.Aeson.TH
import           Data.Text            (Text)

newtype PersonName = PersonName { personName :: Text }
$(deriveJSON (defaultOptions { unwrapUnaryRecords = True }) ''InstallationId)

答案 1 :(得分:2)

您可以使用GeneralizedNewtypeDeriving派生实例。

html {
    height: 100% !important;
}

body, html {
    position: relative !important;
}

body {
    min-height: 100%;
    font-family: 'Open Sans', sans-serif;
    font-size: 16px;
    overflow-x: hidden !important;
    color: #838282;
    font-family: 'Open Sans', sans-serif;
}