Piszę rekord data
, aby przygotować obiekt JIRA
JSON
. Problem polega na tym, że wiele obiektów ma takie same etykiety dla par nazwa/wartość. Na przykład:Jak radzić sobie z przestrzenią nazw Haskell?
(wrócił z dyni i sformatowany)
{"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
}
}
]
kiedy skonstruować problematyczne odpowiadające Haskell data
rekordy uzyskać:
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
i 'id' i 'ja' będzie kolidować . Okazało się, że mogę rozwiązać ten problem, zmieniając tylko nazwy w rekordach i naprawiając je ręcznie utworzoną instancją FromJSON
. Wszelkie alternatywne rozwiązania byłyby mile widziane.
Zauważ, że 'typeclasses stylu HasFoobar' są prawie zawsze fatalny pomysł, jeśli chodzi o pisanie czyste, dobrze zbudowane kod Haskell. Ale gdy próbuje się dopasować strukturę kodu nie-Haskella do celów międzyoperacyjnych, jeśli druga strona w dużej mierze opiera się na przeciążonych funkcjach i/lub hierarchiach podtypów, może nie być lepszego podejścia. –
Aktualizuję część, w której zalecane są oddzielne pliki. Klasy typów przyczyniają się do złego wykorzystania przestrzeni nazw, ponieważ są bardzo trudne do zrozumienia przez użytkowników w odniesieniu do typów i po cichu ulegają awarii i robią coś niewłaściwego po zastosowaniu do niewłaściwego typu. –