It's not Haskell, strictly speaking. There are some weird global state mutations in NixOS (I.e. the pkgs object) that aren't as intuitive as you'd like. Also, the novel file structure makes composing packages that aren't already built to do so quite difficult. Trying to get eclimd to work with emacs and eclipse was a giant pain.
There are no global state mutations in `pkgs`. All immutable parts are in `impure.nix`, which already has a complete `pkgs`.
Maybe you are confusing state mutations with fixed points, which are used extensively (thankfully).
There are no global state mutations in pkgs until you need a custom package, and then you're overriding the global state with your own custom state.
That does not modify global state - it creates a new state from the old one + your modifications.
In other words, it modifies global state.
I expect that your issue is more with the fact that there is a mega state object that contains almost everything - not that it is somehow global, which it isn't. You can't access it unless it is passed to you.
Generally, yes. Nix has great support for haskell libraries, AFAIK. Guix uses guile scheme, so that certainly attracts scheme users.