Я не склонен использовать Stack, но в системах сборки путь к библиотеке, предоставляемый флагами командной строки, обычно передается только компоновщику. Заметьте (с main = print =<< lookupEnv "LD_LIBRARY_PATH"
):
$ stack --extra-lib-dirs=/foopath/bin/glnxa64 --extra-include-dirs=/foopath/extern/include exec ./foo
Just ""
$
Сравните с тем, что вы сделали вторым:
$ LD_LIBRARY_PATH=/foopath/bin/glnxa64 ./foo
Just "/foopath/bin/glnxa64"