将DeriveGeneric用于参数化类型

问题描述 投票:2回答:1

我想为我的参数化类型使用自动DeriveGeneric。我收到错误。我想解码一个yaml文件ino FromJSON类型。

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

import Web.Scotty
import Data.ByteString.Char8 (pack, unpack)
import Data.ByteString.Lazy (toStrict, fromStrict)
import Data.List
import Data.Yaml
import GHC.Generics

data EPSG a = EPSG { epsg3857 :: a }

data Resolution = Resolution { max :: Int, items :: [Double]}

data Config = Config { minX :: EPSG Double, minY :: EPSG Double, maxX :: EPSG Double, maxY :: EPSG Double
                   , resolution :: EPSG Resolution
                   , metersPerUnit :: EPSG Double
                   , pixelSize :: EPSG Double
                   , scaleNames :: EPSG [String]
                   , tileWidth :: EPSG Double
                   , tileHeight :: EPSG Double
                   , subdirBit :: EPSG [Int]
                   , subdirShiftBit :: EPSG [Int]
                   , subdirNumSize :: EPSG [Int]
                   , fileNameNumSize :: EPSG [Int] } deriving Generic

instance FromJSON EPSG *
instance FromJSON Resolution
instance FromJSON Config

线EPSG *引发错误。我该如何解决?

haskell aeson
1个回答
5
投票

你对EPSG的定义也需要派生泛型,然后你需要约束你的实例,以便为FromJSON设置一个a实例。

data EPSG a = EPSG { epsg3857 :: a } deriving Generic

...

instance FromJSON a => FromJSON (EPSG a)
© www.soinside.com 2019 - 2024. All rights reserved.