Hi all, I am currently a having a bizarre Haskell problem, and was wondering if anyone had any suggestions.
This is a snippet from a source file: > foo n = [ a ^* i | i <- [0..(n-2)] ] > where i ^* j = (i ^ j) `mod` n > a = generator n > rader :: Array Int (Complex Double) -> Int -> Array Int (Complex Double) > rader f n = foo a n -- DEBUG: should be f' > where h = listArray (0,n-2) [ f!(a ^* (n-(1+n'))) | n' <- [0..(n-2)] ] > g = listArray (0,n-2) [ w (a ^* n') | n' <- [0..(n-2)] ] > f' = array (0,n-1) ((0, sum [ f!i | i <- [0..(n-1)] ]) : [ (a ^* i, f!0 + >sum [ h!j * g!((i-j)`mod`(n-1)) | j <- [0..(n-2)] ]) | i <- [0..(n-2)] ]) > w i = cis (-2 * pi * fromIntegral i / fromIntegral n) > i ^* j = (i ^ j) `mod` n > a = generator n Under hugs and ghc, calling 'foo' and 'rader' with the proper arguments will give me different results under certain circumtances. In rader, n is the number of elements in the array. If n is < 23, then everything is OK. If n >= 23, then rader returns the wrong result. The bizarre thing is that if I comment out the definitions of h and f' in rader, then it returns the correct results. Hugs also give different reduction counts depending on whether h and f' are commented out or not. If I add any more definitions that reference f, then rader misbehaves. What is even more bizarre is that if I copy everything into a separate file, then it work for all n. Any suggestions or hints, other than just use a separate file? Separate files isn't really an option, because the above is simplified a bit, and the final version would have mutually recursive modules, which hugs can't handle. Thanks. -- Matthew Donadio ([EMAIL PROTECTED]) _______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell