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