Ich schreibe einen data
Datensatz zu Marshall ein JIRA
JSON
Objekt. Das Problem ist, mehrere Objekte haben die gleichen Bezeichnungen für Name/Wert-Paare. Zum Beispiel:Wie man mit Haskell Namensraum fertig wird?
(von Locke zurück und formatiert)
{"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
}
}
]
, wenn ich die problematischen entsprechenden Haskell data
Aufzeichnungen Konstrukt erhalte ich:
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
und 'id' und 'Selbst' kollidieren . Es ist mir aufgefallen, dass ich das lösen könnte, indem ich einfach die Namen in den Datensätzen ändere und sie mit einer manuell erzeugten FromJSON
Instanz behebe. Jede alternative Lösung wäre willkommen.
Beachten Sie, dass 'HasFoobar' Stil typeclasses fast immer eine schreckliche Idee, wenn es sauber zu schreiben kommt, gut strukturierten Haskell-Code. Wenn jedoch versucht wird, die Struktur von Nicht-Haskell-Code für Interop-Zwecke abzugleichen, gibt es möglicherweise keinen besseren Ansatz, wenn die andere Seite stark auf überladene Funktionen und/oder Subtyphierarchien angewiesen ist. –
Ich aktualisiere den Teil, in dem Sie separate Dateien empfohlen haben. Typenklassen sorgen für eine schlechte Namespacing-Lösung, da sie für die Benutzer sehr schwierig sind, sich über die Typen zu verständigen und im Stillen fehlschlagen und das Falsche tun, wenn sie auf den falschen Typ angewendet werden. –