我正在寫一個data
記錄給一個JIRA
JSON
對象。問題是,多個對象具有相同的名稱/值對標籤。例如:如何應對Haskell名稱空間?
(從捲曲返回並格式化)
{"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
}
}
]
當我構建了問題的相應的哈斯克爾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' 和 '自我' 的比賽。它發生在我身上,我可以通過更改記錄中的名稱並使用手動創建的FromJSON
實例來解決此問題。 任何替代解決方案將受到歡迎。
注意'HasFoobar'風格類型類幾乎都是一個可怕的想法,當談到編寫乾淨,結構良好的Haskell代碼。但是當試圖匹配非Haskell代碼的結構以用於互操作目的時,如果另一方嚴重依賴於重載函數和/或子類型層次結構,則可能沒有更好的方法。 –
我在推薦你推薦單獨文件的部分。類型類是一種糟糕的命名空間解決方案,因爲它們對用戶來說非常難以推斷類型,並會在默認情況下失敗,並在應用於錯誤類型時做錯誤的事情。 –