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