
#7927: Error in 'lift' line causes the 'impossible' to happen ---------------------------------+------------------------------------------ Reporter: MitchellSalad | Owner: Type: bug | Status: closed Priority: normal | Milestone: Component: Compiler | Version: 7.6.3 Resolution: duplicate | Keywords: Os: Linux | Architecture: x86_64 (amd64) Failure: Compile-time crash | Difficulty: Unknown Testcase: | Blockedby: Blocking: | Related: ---------------------------------+------------------------------------------ Changes (by simonpj): * status: new => closed * difficulty: => Unknown * resolution: => duplicate Old description:
import Control.Monad.Trans.Class (lift) import Control.Monad.Trans.Maybe (MaybeT)
foo :: MaybeT IO () foo = lift putStrLn "foo"
--------
This code caused the following output from GHC:
Couldn't match kind `* -> *' with `*' Expected type: [Char] -> MaybeT IO () Actual type: [Char] -> MaybeT IO () Kind incompatibility when matching types: [Char] :: * -> * [Char] :: * The function `lift'ghc: panic! (the 'impossible' happened) (GHC version 7.6.3 for x86_64-unknown-linux): kindFunResult <<details unavailable>>
--------
The line should of course be 'lift $ putStrLn "foo"'. Apologies if this is a duplicate bug.
New description: {{{ import Control.Monad.Trans.Class (lift) import Control.Monad.Trans.Maybe (MaybeT) foo :: MaybeT IO () foo = lift putStrLn "foo" }}} This code caused the following output from GHC: {{{ Couldn't match kind `* -> *' with `*' Expected type: [Char] -> MaybeT IO () Actual type: [Char] -> MaybeT IO () Kind incompatibility when matching types: [Char] :: * -> * [Char] :: * The function `lift'ghc: panic! (the 'impossible' happened) (GHC version 7.6.3 for x86_64-unknown-linux): kindFunResult <<details unavailable>> }}} The line should of course be `lift $ putStrLn "foo"`. Apologies if this is a duplicate bug. -- Comment: Yes I think it's a dup of some combination of #7920, #7905, #7696, #7513. (There are some more; search Trac for "kindFunResult".) Works in HEAD: {{{ T7927.hs:7:7: Couldn't match type ‛(->) String’ with ‛[Char]’ Expected type: [Char] -> MaybeT IO () Actual type: t0 ((->) String) (MaybeT IO ()) The function ‛lift’ is applied to two arguments, but its type ‛(String -> MaybeT IO ()) -> t0 ((->) String) (MaybeT IO ())’ has only one In the expression: lift putStrLn "foo" In an equation for ‛foo’: foo = lift putStrLn "foo" T7927.hs:7:12: Couldn't match type ‛IO ()’ with ‛MaybeT IO ()’ Expected type: String -> MaybeT IO () Actual type: String -> IO () In the first argument of ‛lift’, namely ‛putStrLn’ In the expression: lift putStrLn "foo" }}} Simon -- Ticket URL: http://hackage.haskell.org/trac/ghc/ticket/7927#comment:1 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler