
On Thursday, August 17, 2006 7:54 PM, Brian Smith wrote:
I want to have conditionals limited in their placement to make things easier for refactoring tools. But, I don't have any ideas about how to deal with conditional exports without allowing preprocessor conditionals in the export list.
It seems to me that all uses of the preprocessor could be avoided except for cases like: #ifdef _SPARC -- sparc code #else #ifdef _INTEL86 -- i86 code #else -- byte code #endif #endif and the above could afaics be dealt with by having a conditional import directive eg: module Platforms (Platform(..)) where data Platform = Sparc | Intel | ByteCode module Client where import Platform import qualified ( case #Platform of Sparc -> Compiler.Sparc.CodeGen Intel -> Compiler.Intel.CodeGen _ -> Compiler.ByteCode.CodeGen ) as CodeGen where a leading '#' denotes a preprocessor symbol (corresponding to the type of the same name) which can only be set outside the program ie on the command line, thus ensuring that the same module can't have multiple interpretations in the same program. Conditions could be formed using case, if, and expressions which can be evaluated at compile time. Of course this would require some effort to modify existing code, but it would have the great advantage that the conditional compilation would be well typed and be part of the normal grammar thus making it easier to write refactoring tools. Regards, (another) Brian. -- Logic empowers us and Love gives us purpose. Yet still phantoms restless for eras long past, congealed in the present in unthought forms, strive mightily unseen to destroy us. http://www.metamilk.com _____________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe