#2275: Poor indication of type error location
-------------------------------------+--------------------------------------
Reporter: guest | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler (Type checker) | Version: 6.8.2
Severity: normal | Resolution:
Keywords: | Difficulty: Unknown
Testcase: | Architecture: Unknown
Os: Unknown |
-------------------------------------+--------------------------------------
Changes (by igloo):
* difficulty: => Unknown
Old description:
> Using {-# OPTIONS_GHC -XArrows -fno-monomorphism-restriction #-}, and
> Yampa
> Starting from line 32, my program contains:
>
> fireworkSF :: Point2 GL.GLdouble -> Point2 GL.GLdouble -> Object
> fireworkSF p0 pFinal = proc _ -> do
> rec
> position <- (p0 .+^) ^<< integral -< v0
> let shouldExplode = position == pFinal
> let killReq = if shouldExplode then Event () else noEvent
> let spawnReq = if shouldExplode
> then Event (Explode pFinal)
> else noEvent
> returnA -< ObjectOutput {oState = FireworkState position
> ,oKillReq = killReq
> ,oSpawnReq = spawnReq}
> where
> v0 = (pFinal ^-^ p0) ^/ 2
>
> The type error reports:
> Firework.hs:32:0:
> Couldn't match expected type `Point2 GL.GLdouble'
> against inferred type `Vector2 GL.GLdouble'
> When using functional dependencies to combine
> AffineSpace (Point2 a) (Vector2 a) a,
> arising from the instance declaration at <no location info>
> AffineSpace (Point2 GL.GLdouble) (Point2 GL.GLdouble) a,
> arising from a use of `.+^' at Firework.hs:34:16-23
> When generalising the type(s) for `fireworkSF'
>
> Indicating that the bug is something to do with line 34. The actual bug
> is that the last line of the paste should read:
> v0 = (pFinal .-. p0) ^/ 2
New description:
Using {-# OPTIONS_GHC -XArrows -fno-monomorphism-restriction #-}, and
Yampa
Starting from line 32, my program contains:
{{{
fireworkSF :: Point2 GL.GLdouble -> Point2 GL.GLdouble -> Object
fireworkSF p0 pFinal = proc _ -> do
rec
position <- (p0 .+^) ^<< integral -< v0
let shouldExplode = position == pFinal
let killReq = if shouldExplode then Event () else noEvent
let spawnReq = if shouldExplode
then Event (Explode pFinal)
else noEvent
returnA -< ObjectOutput {oState = FireworkState position
,oKillReq = killReq
,oSpawnReq = spawnReq}
where
v0 = (pFinal ^-^ p0) ^/ 2
}}}
The type error reports:
{{{
Firework.hs:32:0:
Couldn't match expected type `Point2 GL.GLdouble'
against inferred type `Vector2 GL.GLdouble'
When using functional dependencies to combine
AffineSpace (Point2 a) (Vector2 a) a,
arising from the instance declaration at <no location info>
AffineSpace (Point2 GL.GLdouble) (Point2 GL.GLdouble) a,
arising from a use of `.+^' at Firework.hs:34:16-23
When generalising the type(s) for `fireworkSF'
}}}
Indicating that the bug is something to do with line 34. The actual bug
is that the last line of the paste should read:
{{{
v0 = (pFinal .-. p0) ^/ 2
}}}
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/2275#comment:2>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
_______________________________________________
Glasgow-haskell-bugs mailing list
Glasgow-haskell-bugs@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs