Do Bazel/Buck/etc reuse Cabal or do they reimplement the build themselves? I haven't used either (at Bloomberg we use cabal and stack, and good point about default-language, I forgot that was required), but my impression is that Bazel likes to reimplement everything so it can see precise dependencies, have granular caching, etc.
I don't know what the Buck Haskell support does. But in Bazel, you have a bit of both. The default behaviour is to build external dependencies with Cabal [1], and local files in pure Bazel [2]. By default, Bazel's rules_haskell will want to use GHC's defaults on your files.