To choose the odir subdirectory to write the object file from Haskell source files, the following rules apply:
If the module has a simple name (eg Foo), then the object file (Foo.o) is stored into the odir top level directory.
If the module has a hierarchical name (eg Foo.Bar.Baz) then the object file (Baz.o) is stored into the directory odir/Foo/Bar.
The same rules should be used for the C-files. In C we don't have any hierarchical module names.
Hence when -odir is set, the object file of a c-file should always be written directly into the top level odir directory.