
On Sat, Jul 24, 2010 at 01:10:56PM +0200, Jürgen Doser wrote:
This seems to be a bug in ghc. First, let's fix bar to give the full three arguments (Int, Float, Double) to g:
bar f g = proc x -> do (f -< x) `foo` (\n m k -> g -< (n,m,k))
ghc infers the type:
bar :: (t -> String) -> ((Double, Float, Int) -> String) -> t -> String
and we see that the argument order in the second argument to bar is reversed. But the arguments are still given to bar in the order (Int, Float, Double). For example, the 6.0 in foo is interpreted as an Int and outputs a 0 (the first 32 bits in such a small double are zeros). When one varies the numbers in foo, one can see the effects in bar. Can someone from GHC HQ confirm my understanding, or is this just not supposed to work with multiple arguments?
You're right: it's getting the argument order wrong, so -dcore-lint fails on this example and all bets are off. Definitely a bug.