cabal beginner issues (other-modules, build-depends)
Andrew Pimlott
andrew at pimlott.net
Thu Sep 22 18:02:29 EDT 2005
Two issues I've encountered while trying out cabal:
1. The use of "other-modules" is a bit confusing. I realize now that
other-modules must contain all modules in the source tree used by
the exposed modules. However, since the package built and installed
without error when I left out this field, I was surprised to get
undefined references when I tried to use the package.
I guess this happened because ghc --make found the other modules
automatically, but cabal didn't. I would rather have the build step
fail in this case. Maybe cabal shouldn't be using --make.
2. Similar comments apply to build-depends. I wrote a module Foo.hs:
module Foo (foo) where
import Control.Monad.Identity
foo = runIdentity (return ())
and a cabal file (working from an example obviously):
Name: foo
Version: 1.1
License: BSD3
Build-Depends: base
Exposed-modules:
Foo
This built and installed without error, but when I created another
module that imports Foo and tried to compile it with "ghc --make", I
got undefined references to Control.Monad.Identity. Eventually, I
found that I need to add mtl to build-depends. Again it would have
been better to get an error during package creation, and this was
particulary tricky to figure out because "build-depends" sounds like
it should only affect package at build-time.
Another way to look at both issues is that if ghc can figure out other
modules and packages itself, the user shouldn't be required to specify
them in a cabal file. (I know there are other compilers than ghc.)
I am using Debian ghc6 package 6.4-4.1.
Andrew
More information about the Libraries
mailing list