Our great sponsors
-
hsthrift
Discontinued The Haskell Thrift Compiler. This is an implementation of the Thrift spec that generates code in Haskell. It depends on the fbthrift project for the implementation of the underlying transport.
-
InfluxDB
Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
-
hsthrift
The Haskell Thrift Compiler. This is an implementation of the Thrift spec that generates code in Haskell. It depends on the fbthrift project for the implementation of the underlying transport. (by facebookincubator)
However, I'm a huge fan of static tools like this in general. I've heard great things about https://package.elm-lang.org/packages/jfmengels/elm-review/latest/ and I need to try out https://github.com/kowainik/stan. Also its possible HLint has ways to write more advanced rules and I just don't know about them, but even if that's so hopefully I've explained why just dropping it in isn't a huge win.
A bunch of those hints are coming from generated code - e.g. https://github.com/TomMD/hsthrift/blob/c9fb3a4b425c86fd0e0f7fe86d438fb90c0ff2e3/compiler/test/fixtures/gen-hs2/A/S/Service.hs#L56 is a complete mess for a human, but perfectly reasonable as a generation target. They might well be using HLint, and not running it on generated code, which would be a reasonable approach.
We have now switched to the pinch library ( https://hackage.haskell.org/package/pinch ) which feels more Haskell-y, although at the price of using some more advanced type-level stuff (type families, GADTs). On the other hand, finally an excuse to use those in production code :-) We also have written a code-generator for it, though that could do with a lot of polish ...( https://github.com/phile314/pinch-gen/ ).
A production RPC framework is a lot of work, so of course we didn't want to duplicate everything in the C++ implementation. Yes that makes it a bit of a pain to build, but we have provided instructions and a CI setup that's working right now on github to demonstrate that it all works. Also there's a [pure Haskell implementation of the transport layer](https://github.com/facebookincubator/hsthrift/blob/master/lib/Thrift/Channel/SocketChannel.hs) in the repository for experimentation - we're in the process of making it easier to use this, but when we're done the only C++ dependency will be folly.