gpt4 book ai didi

json - 如何应对Haskell命名空间?

转载 作者:行者123 更新时间:2023-12-02 12:56:45 25 4
gpt4 key购买 nike

我正在编写一个 data 记录来编码 JIRA JSON 对象。问题是,多个对象具有相同的名称/值对标签。例如:

(从curl返回并格式化)

{"expand":"schema,names"
,"startAt":0
,"maxResults":2
,"total":74
,"issues":[
{"expand":"editmeta,renderedFields,transitions,changelog,operations"
,"id":"183614"
,"self":"https://10.64.16.44/rest/api/latest/issue/183614"
,"key":"BNAP-339"
,"fields":{"versions":[
{"self":"https://10.64.16.44/rest/api/2/version/28240"
,"id":"28240"
,"name":"2012-12-07"
,"archived":false
,"released":false
}
]
,"status":{"self":"https://10.64.16.44/rest/api/2/status/1"
,"description":"The issue is open and ready for the assignee to start work on it."
,"iconUrl":"https://10.64.16.44/images/icons/status_open.gif"
,"name":"Open"
,"id":"1"
}
,"description":"Do Re Mi Fa"
,"resolution":null
}
}
]

当我构造有问题的相应 Haskell data 记录时,我得到:

data Issue = Issue {expand :: String
,id :: String
,self :: String
,key :: String
,fields :: Fields
} deriving Generic


data Version = Version {self :: String
,id :: String
,name :: String
,archived :: Bool
,released :: Bool
} deriving Generic

并且“id”和“self”会发生冲突。我突然想到,只需更改记录中的名称并使用手动创建的 FromJSON 实例修复它即可解决此问题。欢迎任何替代解决方案。

最佳答案

我通过将 IssueVersion 之类的内容放在同一层次结构中的单独文件中来解决 Protocol Buffer 中的问题。

Haskell 仅使用单独的模块来控制命名空间,因此这是正统的解决方案。

更加奇特:使用类型类来定义可用名称:

class Has'self a b | a -> bwhere
get'self :: a -> b
set'self :: b -> a -> b

instance Has'self Issue String where ...
instance Has'self Version String where ....

编辑:下面的评论提醒我提供更详细的建议。不要使用Has'self之类的解决方案——那些已经走这条路的人报告说它变得丑陋。我可以保证单独模块的路径。

PS:也许你可以使用lens您所在领域的图书馆!

关于json - 如何应对Haskell命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13848996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com