2017-03-09 11:49 GMT+06:00 Isaac Torbett <[email protected]>: > So with no reflection in urweb (I'm guessing) a JSON serializer needs to be > given field names? If I am understanding this correctly. >
Yes, precisely, there's no reflection in Ur/Web! At runtime, there may not even be records in some cases (where in source code you'd have some computation with records), I guess. > On Mar 9, 2017 12:00 AM, "Artyom Shalkhakov" <[email protected]> > wrote: >> >> Hello Isaac, >> >> 2017-03-09 0:51 GMT+06:00 Isaac Torbett <[email protected]>: >> > I'm trying to get the urweb server to return json, but what is the >> > type/kind >> > I should put in the transaction monad? >> > >> > >> > val main : <here> -> transaction page >> > >> > >> > What would I put in <here>? >> > >> >> You should put [unit] (which is the same as {} aka the empty record). >> The expression of this type would be () (empty parens), so you can >> write: >> >> > fun main () = ... (* some code *) >> >> You could also write: >> >> > fun main (_ : unit) = ... (* some code *) >> >> which means there is no pattern matching involved. There's only one >> element in type unit, and it's (). So it doesn't make much sense to >> pattern-match on it, but we still do it, presumably to let the type >> inference work out its type for us. :-) >> >> > Furthermore- I don't even know if my json-like structure is allowed, the >> > compiler isn't complaining about it, so maybe it's fine. >> > >> >> To return JSON instead of HTML, you will have to write something along >> the lines of: >> >> > fun main () = >> > let >> > val myJSON = "{\"foo\": 1}" (* the JSON, serialized as a string *) >> > in >> > returnBlob (textBlob myJSON) (blessMime "application/json") >> > end >> >> And also, add this to your .urp file: >> >> > allow mime application/json >> >> To *produce* JSON (serialized to a string), you can use the JSON >> library, which is part of the Ur/Web distribution. >> >> I was planning on writing an article detailing how to create a simple >> "modern" CRUD app in Ur/Web, that works very similarly to what you can >> write with Angular, OpenUI5 or React. Stay tuned. >> >> Using Ur/Web for creating a lightweight web service is also a >> possibility. You can even run it on your smart toaster! :-) >> >> > >> > fun main () = return queryX1 (SELECT topic.Title, topic.Body FROM topic) >> > >> > >> > I'm not even sure I know what I'm doing, `completely new to ML-style >> > languages. >> > >> > - Isaac >> > >> > P.S. I've never actually used a Mailing List before, so if my post is >> > malformed, please tell me. >> > >> > _______________________________________________ >> > Ur mailing list >> > [email protected] >> > http://www.impredicative.com/cgi-bin/mailman/listinfo/ur >> > >> >> >> >> -- >> Cheers, >> Artyom Shalkhakov >> >> _______________________________________________ >> Ur mailing list >> [email protected] >> http://www.impredicative.com/cgi-bin/mailman/listinfo/ur > > > _______________________________________________ > Ur mailing list > [email protected] > http://www.impredicative.com/cgi-bin/mailman/listinfo/ur > -- Cheers, Artyom Shalkhakov _______________________________________________ Ur mailing list [email protected] http://www.impredicative.com/cgi-bin/mailman/listinfo/ur
