9

我想知道是否有人熟悉readHaskell 中 Prelude 的功能。

该函数的类型如下。

Read a => String -> a

有人可以用几个例子来解释我如何使用这个函数以及可以将 String 转换成什么类型​​?

谢谢

4

1 回答 1

11

Read a => String -> a意味着它a可以是任何作为类实例的Read类型。对于满足该要求的类型,它至少必须具有Read'sreadPrecreadsPrec函数的实现。许多内置类型都提供了一个实现,您可以使用它来为您自己的自定义类型deriving生成一个实现。data

要指定你想要read的字符串,你可以直接输入 annotate 调用:

read "1" :: Int

或者给包含对read签名的调用的函数,以便编译器可以找出你想要的:

myFunc :: String -> Int
myFunc s = read s

签名表示该函数返回一个 Int,因此编译器可以推断出什么类型,read s因为myFunc返回任何调用的read评估结果。

于 2018-03-04T20:02:09.813 回答