Haskell将字符串中的数字转换为类型

时间:2012-02-15 21:15:20

标签: haskell

我已将类型定义为:

type Register = Int

我还可以使用以下函数从字符串列表中读取数字列表:

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

现在,在readInt这样的列表上使用readInt "12 32 11"会向我[12, 32, 11]提供[Int]类型。

我的问题是:我不是[Int],而是[Register]

我试过了:

readRegister :: String -> Register
readRegister s = read s :: Register

但正如我猜测的那样,它似乎不是有效的语法。

2 个答案:

答案 0 :(得分:3)

您对Register的定义是一种类型别名,即它可以与其右侧互换,即此处为Int

但是你声明readInt "12 32 11"会产生[12,32,11] :: [Int]。鉴于readInt :: String -> Int的类型签名,这是不可能的。也许您可以向我们展示一些代码。

答案 1 :(得分:2)

Register只是类型Int的另一个名称,它是相同的类型。语法

readRegister :: String -> Register
readRegister s = read s :: Register

有效(但read结果上的类型注释是不必要的)。如果它不起作用,您的编译器/解释器就会崩溃。但是,类型是显示为Int还是Register可能会令人惊讶。预测何时扩展类型同义词并不容易预测。