[GHC] #8450: can't match type Bool with (), but shouldn't have to
GHC
ghc-devs at haskell.org
Wed Oct 16 23:22:33 UTC 2013
#8450: can't match type Bool with (), but shouldn't have to
------------------------------------+-------------------------------------
Reporter: dmwit | Owner:
Type: feature request | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 7.6.3
Keywords: | Operating System: Unknown/Multiple
Architecture: Unknown/Multiple | Type of failure: None/Unknown
Difficulty: Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: |
------------------------------------+-------------------------------------
The following (definitely type-incorrect) file:
{{{
{-# LANGUAGE ScopedTypeVariables #-}
runEffect :: Either Bool r -> r
runEffect = undefined
run :: forall a. a
run = runEffect $ (undefined :: Either a ())
}}}
produces the following error:
{{{
test.hs:7:7:
Couldn't match type `Bool' with `()'
Expected type: a
Actual type: ()
In the expression: runEffect $ (undefined :: Either a ())
In an equation for `run':
run = runEffect $ (undefined :: Either a ())
}}}
This is strange because one of the two types it claims it can't unify
(Bool) doesn't appear in either the expected or actual type. Note that
removing the ($) gets a different error message that makes it a bit more
clear what's going on:
{{{
test.hs:7:18:
Couldn't match type `Bool' with `()'
Expected type: Either Bool a
Actual type: Either a ()
In the first argument of `runEffect', namely
`(undefined :: Either a ())'
In the expression: runEffect (undefined :: Either a ())
In an equation for `run':
run = runEffect (undefined :: Either a ())
}}}
So it seems it's trying to unify Bool and () because it's unifying both a
with Bool and a with (); however, the usual comments about rigid type
variables aren't there, which makes even this error message a bit
confusing.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8450>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list