Mercurial > meta
view tests/testJson.ur @ 16:959583692166
Reorder arguments for better partial application
author | Adam Chlipala <adam@chlipala.net> |
---|---|
date | Sun, 11 Dec 2011 14:44:18 -0500 |
parents | 189245a3c075 |
children | 8de201d70b91 |
line wrap: on
line source
open Json (* Example from http://en.wikipedia.org/wiki/JSON *) type address = {StreetAddress : string, City : string, State : string, PostalCode : string} type phoneNumber = {Type_ : string, Number : string} type person = {FirstName : string, LastName : string, Age : int, Address : address, PhoneNumber : list phoneNumber} val sample : person = {FirstName = "Larry", LastName = "Lambda", Age = 42, Address = {StreetAddress = "99 Confluence Circle", City = "Hoserville", State = "QQ", PostalCode = "66666"}, PhoneNumber = {Type_ = "mobile", Number = "1234"} :: {Type_ = "secret", Number = "ssssh"} :: []} val json_address : json address = json_record {StreetAddress = "streetAddress", City = "city", State = "state", PostalCode = "postalCode"} val json_phoneNumber : json phoneNumber = json_record {Type_ = "type", Number = "number"} val json_person : json person = json_record {FirstName = "firstName", LastName = "lastName", Age = "age", Address = "address", PhoneNumber = "phoneNumber"} fun renderPerson (p : person) = <xml> <b>First name:</b> {[p.FirstName]}<br/> <b>Last name:</b> {[p.LastName]}<br/> <b>Age:</b> {[p.Age]}<br/> <b>Street address:</b> {[p.Address.StreetAddress]}<br/> <b>City:</b> {[p.Address.City]}<br/> <b>State:</b> {[p.Address.State]}<br/> <b>Postal code:</b> {[p.Address.PostalCode]}<br/> <b>Phone numbers:</b> {List.mapX (fn pn => <xml>{[pn.Type_]} => {[pn.Number]}; </xml>) p.PhoneNumber}<br/> </xml> fun parse r = return <xml><body> {renderPerson (fromJson r.Text)} </body></xml> fun main () = return <xml><body> <h1>Json parsing adventure!</h1> <hr/> <h2>Free sample</h2> {[toJson sample]} <hr/> <h2>Parse your own</h2> <form> <textarea{#Text} rows={10} cols={80}/><br/> <submit value="Parse" action={parse}/> </form> </body></xml>