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 (m.p.donadio@ieee.org)
My guess is that you are having an out-of-date .o of .hi file in your working directory. Clean it up and try again. All the best, Daan. ----- Original Message ----- From: "Matthew Donadio" <m.p.donadio@ieee.org> To: <haskell@haskell.org> Sent: Monday, January 27, 2003 10:34 PM Subject: Bizarre Haskell Problem
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 (m.p.donadio@ieee.org) _______________________________________________ Haskell mailing list Haskell@haskell.org http://www.haskell.org/mailman/listinfo/haskell
participants (2)
-
Daan Leijen -
Matthew Donadio