However, it doesn't seem like I should have to do this. Where am I going wrong?
My guess is that the linker used by ghci (which is not the system linker, although there is ongoing work on that front) doesn't know how to deal with frameworks properly. You might have better luck turning your .o into a .dylib and linking *that* against the Foundation framework.