Opened 10 years ago

Last modified 9 years ago

#2275 closed bug

Poor indication of type error location — at Initial Version

Reported by: guest Owned by:
Priority: low Milestone: 6.10 branch
Component: Compiler (Type checker) Version: 6.8.2
Keywords: Cc:
Operating System: Unknown/Multiple Architecture: Unknown/Multiple
Type of failure: None/Unknown Test Case:
Blocked By: Blocking:
Related Tickets: Differential Rev(s):
Wiki Page:

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

Change History (0)

Note: See TracTickets for help on using tickets.