Without a type signature, all GHCI knows: Prelude> :t read "2" read "2" :: Read a => a is that it should return some kind of Read -- that is, something that can be from a string. GHCI is not being asked to return any (concrete) type. If you specify a type -- and if that type can be expressed as a string containing a single digit -- then it works: Prelude> read "2" :: Float 2.0 And otherwise it won't: Prelude> read "2" :: [Float] *** Exception: Prelude.read: no parse You don't necessarily have to provide a type signature, though, if it can be inferred from context: Prelude> floor $ read "2" 2 Prelude> :t floor floor :: (Integral b, RealFrac a) => a -> b Prelude> :t floor $ read "2" floor $ read "2" :: Integral b => b Note that GHCI in this case still does not know exactly the type of (floor $ read "2"), but thanks to the type of floor, it knows enough to proceed. On Fri, May 27, 2016 at 11:38 AM, David Kraeutmann <kane@kane.cx> wrote:
GHCi enables -XExtendedDefaultRules, which cause read "2" to default to (). On 5/27/2016 8:28 PM, Erik Rantapaa wrote:
Hi fellow Haskellers!
If I bring up ghci and evaluate `read 2` I get the error "Prelude.read: no parse"
GHCi, version 7.10.2: http://www.haskell.org/ghc/ :? for help Prelude> read "2" *** Exception: Prelude.read: no parse
Exactly how is this message coming about? I understand that `read` needs a return type in order to determine which type class instance to run. So, in this case, which type is `read` being asked to return?
Thanks, Erik
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
-- Jeffrey Benjamin Brown