fundep bug across module boundary
Consider these two files:
BugImport.hs
module BugImport where
import IOExts
class Monad m => RefMonad m r | m -> r where
newRef :: a -> m (r a)
readRef :: r a -> m a
writeRef :: r a -> a -> m ()
instance RefMonad IO IORef where
newRef = newIORef
readRef = readIORef
writeRef = writeIORef
Bug.hs
import IOExts
import BugImport
foo () = do r <- newRef 1
readRef r
main = do i <- foo ()
print i
The type of foo is
(RefMonad m r, Num a) => () -> m a
so the fundep is needed to resolve the overloading. Bug
ghc complains:
Ambiguous type variable(s) 'r' in the constraint
`RefMonad IO r'
arising from use of `foo' at Bug.hs:7
In a do statement: i <- foo ()
i.e. the fundep is lost. This is compiled with
ghc5.02.1, -package
lang, -fglasgow-exts.
If all the definitions are placed in one module, on the
other hand,
then compilation succeeds. Alternatively, if these two
modules are
loaded into ghci, then they are accepted.
Trac metadata
| Trac field | Value |
|---|---|
| Version | 5.02 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | ResolvedNoReason |
| Component | Compiler |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |