CMake should be able to call cabal to prepare the component, right?
Correct, with the right configuration in your projectname.cabal file, the output of calling cabal build projectname will be a .so (or .dylib or .dll depending on your OS) file, which you can dynamically load in your C++ program at link time.
A more recent example you might be able to get some inspiration from is my virgil-FFI example project, which integrates Haskell with (in this case) Python.