Sto scrivendo un record data
per eseguire il marshalling di un oggetto JIRA
JSON
. Il problema è che più oggetti hanno le stesse etichette per le coppie nome/valore. Per esempio:Come far fronte allo spazio dei nomi Haskell?
(tornato da curl e formattato)
{"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
}
}
]
quando costruisco le problematiche corrispondenti Haskell data
record ottengo:
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
e 'id' e 'sé' si scontreranno . Mi è stato possibile risolvere questo problema semplicemente cambiando i nomi nei record e risolvendolo con un'istanza FromJSON
creata manualmente. Qualsiasi soluzione alternativa sarebbe gradita.
Si noti che 'typeclasses stile HasFoobar' sono quasi sempre una pessima idea quando si tratta di scrivere codice pulito, ben strutturato Haskell. Ma quando si cerca di far corrispondere la struttura del codice non Haskell ai fini dell'interoperabilità, se l'altra parte si basa pesantemente su funzioni sovraccaricate e/o gerarchie di sottotipi, potrebbe non esserci un approccio migliore. –
Sto facendo l'upvoting della parte in cui hai raccomandato i file separati. Le classi di tipi costituiscono una soluzione di namespaces scadente in quanto sono molto difficili per gli utenti ragionare sui tipi e falliscono silenziosamente e fanno la cosa sbagliata quando vengono applicate al tipo sbagliato. –