
I have two questions, related to packages.
1) What is the relationship between the new and cool hierarchical module structure and packages? Packages used to be a way of avoiding name clashes on module level, but that role has been taken over by the new module system.
There are still two reasons for packages to exist: - they are a useful unit of distribution - they reduce link times and GHCi startup time compared to having all your libraries always linked in A separate question is whether you should have to say explicitly '-package foo' on the command line in order to get access to package foo. Simon & I have discussed this and come up with the following conclusion: - package which contain hierarchical modules should be marked 'auto' in the package config. - any package marked 'auto' is always available when using ghc --make and GHCi. The compiler can infer which packages are actually used and link them in as required (I believe the machinery for this is in place as part of Simon's Template Haskell work). - packages not marked 'auto' have to be specified on the command line. - for "one-shot" compilation, i.e. without --make, we can either require you to specify the 'auto' packages, or just link them all in. I'm not sure which I prefer.
Several sub-questions:
- I can add my own packages, can I add my own modules to the hierarchy?
Yes, a package can contain hierarchical modules.
- Can the package system be complete taken over by the module system? I.e. relating certain .a, .so, .dll files and compiler flags with certain parts of the module hierarchy?
That's essentially what the package system does. Every interface file currently contains the name of the package to which it belongs. We *also* separate packages in the file system, but that isn't necessary.
2) I am trying to install my own package. I do not have write access to GHC's package.conf. So, I make my own. But:
[cth/Yahu] -: more yahu.conf [Package {name = "yahu", import_dirs = ["/users/cs/koen/Code/Ghc/Yahu"], source_dirs = [], library_dirs = ["/users/cs/koen/Code/Ghc/Yahu"], hs_libraries = [], extra_libraries = [], include_dirs = [], c_includes = [], package_deps = [], extra_ghc_opts = [], extra_cc_opts = [], extra_ld_opts = ["-lyahu"], framework_dirs = [], extra_frameworks = []}] [cth/Yahu] -: ghc --package-conf yahu.conf -package yahu --make Test ghc-5.04: unknown package name: yahu <<<
The -package-conf option only has one dash. Due to the way GHC parses options, the missing package is reported before the unrecognised flag. It's regrettably confusing, I know. Cheers, Simon