A mature Haskell project such as hledger has probably a few hundred of transitive dependencies, so you won't be able to install them individually by hand. You might try to figure whether each of them is packaged by your distribution (unlikely, unless hledger itself is packaged), but that's not a typical path — just don't use make in that case.
Pip installing required packages is alright. But I expect setup.py to NOT call pip install by itself.
> A mature Haskell project such as hledger has probably a few hundred of transitive dependencies
That's horrifying!
"stack install hledger" would compile just the command line tool (not the curses & web tools), so less downloading.
For end-users who want minimum downloading/building, we recommend one of the binary packages on the download page (nix, docker, homebrew, windows/wine), but that's not you I think.
I've generally come to expect that any software I download and try to build might, through a package manager, pull in additional dependencies (rust, Haskell, scala/Java/closure,...). The only real outliers here seem to be C and C++, of the ones I've worked with.