arrow bug
Initially reported here: http://www.haskell.org/pipermail/glasgow-haskell-users/2010-July/019035.html
This program:
{-# LANGUAGE Arrows #-}
module Main where
import Control.Arrow
foo :: (b -> String) -> ((((b, Int), Float), Double) -> String) -> (b -> String)
foo f g b = f b ++ " " ++ g (((b, 8), 1.0), 6.0)
bar :: (t -> String) -> ((t, Double, Float, Int) -> String) -> t -> String
bar f g = proc x -> do
(f -< x) `foo` \n m k -> g -< (x,n,m,k)
main = do
putStrLn $ foo show show 17
putStrLn $ bar show show 17
putStrLn $ foo show show 42
putStrLn $ bar show show 42
produces the wrong output:
17 (((17,8),1.0),6.0)
17 (17,4.0e-323,1.0,4618441417868443648)
42 (((42,8),1.0),6.0)
42 (42,4.0e-323,1.0,4618441417868443648)
Note that, e.g.,
*Main GHC.Exts GHC.Prim> D# (unsafeCoerce# 4618441417868443648#)
6.0
-dcore-lint failes with multiple errors.
Trac metadata
| Trac field | Value |
|---|---|
| Version | 6.12.3 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |