#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

Reply via email to