I wouldn't really consider stack to be a great tool. There is Stackage which may be useful but the tool itself falls apart quickly when used to compile more than a single package executable.
That being said, one should have looked at these:
- cabal Nix-style builds
- ghicd for continuous type-checking
- stylish-haskell for light code formatting
- brittany for slightly more invasive code formatting
- hlint for linting
Certainly it isn't the most attractive solution - still it is possible and works well.
When it comes to moving things across FFI barrier, that is also very possible as there are all kinds of types (including stable pointers) in the Foreign.* modules that map onto C types.
I've found that most libraries implement the wrapper around C++ functions in the most terrible way. It ranges from userdata types wrapping std::function objects to wrapping the lua_State, which the users have to interact with themselfs.
Luwra uses inlinable functions and templates almost exclusively. That way (best-case scenario), each wrapped field/method/constructor/function implies only one generated lua_CFunction, which invokes the Lua API to retrieve the values and finally call the wrapped function with them.
And all that, during compile-time, which in my opinion is the best part about it.
400€ per year or per semester? Where?
I am at the Institute of Technology in Berlin and I payed 290.37€ this semester, which includes 179.40€ for public transport.
That being said, one should have looked at these: