[Haskell-cafe] read "2" in a "void" context?
jeffbrown.the at gmail.com
Fri May 27 18:42:19 UTC 2016
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
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"
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 at 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:
> > 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
> > return type in order to determine which type class instance to run. So,
> > this case, which type is `read` being asked to return?
> > Thanks,
> > Erik
> > _______________________________________________
> > Haskell-Cafe mailing list
> > Haskell-Cafe at haskell.org
> > http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
Jeffrey Benjamin Brown
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Haskell-Cafe