Disambiguate IO actions in GHCi with :set +t
Currently GHCi's :set +t displays the same type for the following:
% ghci -ignore-dot-ghci
GHCi, version 7.8.2: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> :set +t
Prelude> 'a'
'a'
it :: Char
Prelude> return 'a'
'a'
it :: Char
Prelude> return 'a' :: IO Char
'a'
it :: Char
A user at #haskell-beginners ran into a problem where they mistook an expression that defaulted to IO for a pure expression (Id . even <$> pure 5), :set +t was suggested but ended up showing the incorrect type:
ghci> Id . even <$> pure 5
Id False
it :: Id Bool
This is bad for pedagogical reasons, it would be an improvement to display the following:
Prelude> :set +t
Prelude> 'a'
'a'
it :: Char
Prelude> return 'a'
'a'
it :: Char <- return 'a' :: IO Char
Prelude> return 'a' :: IO Char
'a'
it :: Char <- return 'a' :: IO Char
mirroring existing syntax:
Prelude> :set -XScopedTypeVariables
Prelude> a :: Char <- return 'a' :: IO Char
a :: Char
Trac metadata
| Trac field | Value |
|---|---|
| Version | 7.8.2 |
| Type | FeatureRequest |
| TypeOfFailure | OtherFailure |
| Priority | low |
| Resolution | Unresolved |
| Component | GHCi |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | hvr |
| Operating system | |
| Architecture |