An update. I'm using the ports approach to deal with JSON (and also sending the HTTP request). For several months, I've had a small but critical app in production using that. Another project in development is too. In the process, I have run across two additional caveats with this approach.
1. *Ports don't convert undefined properties to Maybe.Nothing.* It's an open issue from Jan 2016. <https://github.com/elm-lang/core/issues/476> For a Maybe property, the JSON must have the property present and set to null. Otherwise error. This is particularly annoying when you store the data as JSON and pass it back to the client as-is. To work around this issue, I either have to waste space storing nulls in the database or waste (CPU/response) time server-side to inject nulls in the response. 2. *Cmd.map can't be used with this method.* Using Http module, you can use Cmd.map to take some data from the request and give it to the response Msg. Using ports, you can't do that. I've noticed this when the data is easy to provide for a request, but after the response comes back it is less convenient to dig out of the model (e.g. behind a case statement). Neither of these are blockers for me, just nuisance issues. It still beats maintaining codecs. I've seen rumblings about tools for code-gen'ing JSON codecs for us (maybe elm-format? <https://github.com/avh4/elm-format/issues/194> There also exists elm-swagger, but I don't use swagger.). I dunno though. Where possible, I tend to avoid code-gen because it's for handling a really tedious problem. And if the code-gen fails, then I have to handle a really tedious problem. (XSD/WSDL flashbacks.) All it would really take for a profound QoL improvement are a couple of "special" functions on Http that handle data exactly like ports do now... just saying. -- You received this message because you are subscribed to the Google Groups "Elm Discuss" group. To unsubscribe from this group and stop receiving emails from it, send an email to elm-discuss+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.