
Condsider the following Haskell program (fragment): f 0 = “zero” g 0 = “NULL” f n = “non-zero” g n = “PRESENT” This will result in two “Multiple Declaration” errors. There is a good motivation for this - disallowing such an interleaving of declarations makes it easy for the compiler to capture a common typo, namely errors of the following form - here an attempt to define a single function called myFun. myFun 0 = “zero” myfun 1 = “one” myFun n = “too big!” However I have use-cases where it would be nice to interleave as per the first example above - with markedly different function names. It invokes a large case analysis, where I have other auxiliary functions associated with each case, but which I’d like to (1) have at the top-level for testability (2) keep textually local to the case with which they are associated. I don’t think there is a language extension to disable the multiple declaration check - but would such a feature we possible. I’d see it as one which still performs the check, but issues a warning rather than an error - particularly if it notices that the interleaved names are very similar. Is this a reasonable suggestion, or are there other reasons for not doing this that I’ve missed? Maybe there is a better way to satisfy (1) and (2) above? Regards, Andrew -------------------------------------------------------------------- Andrew Butterfield Tel: +353-1-896-2517 Fax: +353-1-677-2204 Lero@TCD, Head of Foundations & Methods Research Group School of Computer Science and Statistics, Room G.39, O'Reilly Institute, Trinity College, University of Dublin http://www.scss.tcd.ie/Andrew.Butterfield/ --------------------------------------------------------------------