haskell - 将 DeriveGeneric 用于参数化类型

标签 haskell aeson

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

{-# 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 * 引发错误。我该如何解决?

最佳答案

您对 EPSG 的定义也需要派生泛型,然后您需要将您的实例约束为具有 aFromJSON 实例

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

...

instance FromJSON a => FromJSON (EPSG a)

关于haskell - 将 DeriveGeneric 用于参数化类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47890435/

相关文章:

c++ - Data.Aeson 在 ghc 中使用 ForeignFunctionInterface

haskell - 在 haskell 中保存随机数生成器的状态

haskell - 将函数应用于文件(如果存在)

haskell + "Remove a parameter"

if-statement - 解析 Haskell 代码中输入 ‘if’ 的错误

json - FromJSON 从多个字段创建一个列表

json - 来自 Haskell 的查询请求,包含 "same data"的两倍

haskell - 使用 Aeson 解析嵌套 JSON 中的数组

haskell - 如何更新 JSON 对象的字段?

Haskell 使用 foldr 计算长度抛出类型错误