
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
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