JSON разбор в Haskell

Я пытаюсь проанализировать данные JSON в haskell. Пройдя множество сайтов, я смог добраться до этого.

data Address = Address { house :: Integer, street :: String, city :: String, state :: String, zip :: Integer } deriving (Show)
data Person = Person { name :: String, age :: Integer, address :: Address } deriving (Show)

getName :: Person -> String
getName (Person n _ _) = n

getAddress :: Person -> Address
getAddress (Person _ _ a) = a

getState :: Address -> String
getState (Address _ _ _ s _) = s

Я пишу это в файле ex.hs и загружаю его в ghci ->

Prelude> import Text.JSON
Prelude Text.JSON> :load ex
Main Text.JSON> let aa = "{\"name\": \"some body\", \"age\" : 23, \"address\" : {\"house\" : 285, \"street\" : \"7th Ave.\", \"city\" : \"New York\", \"state\" : \"New York\", \"zip\" : 10001}}"
...> decode aa :: Result JSValue

Возвращается

Ok (JSObject (JSONObject {fromJSObject = [("name",JSString (JSONString {fromJSString = "some body"})),("age",JSRational False (23 % 1)),("address",JSObject (JSONObject {fromJSObject = [("house",JSRational False (285 % 1)),("street",JSString (JSONString {fromJSString = "7th Ave."})),("city",JSString (JSONString {fromJSString = "New York"})),("state",JSString (JSONString {fromJSString = "New York"})),("zip",JSRational False (10001 % 1))]}))]}))

Само собой разумеется, это кажется довольно многословным (и пугающим). Я пытался делать

...> decode aa :: Result Person

и это дало мне ошибку. Как мне выполнить заполнение экземпляра структуры данных Person из этой строки json? Например, что я должен сделать, чтобы получить состояние человека в строке JSON ...

Ответы на вопрос(2)

Ваш ответ на вопрос