【发布时间】:2013-02-10 06:17:02
【问题描述】:
对于以下代码,如何指定函数 storePhone 将 Int 存储为的电话号码类型(HomePhone 或 WorkPhone)?
type HomePhone = Int
type WorkPhone = Int
data Phone = HomePhone
| WorkPhone
storePhone :: int -> Phone
storePhone num = num
main :: IO ()
main = print $ storePhone 12345678
这个问题是我正在做的一个附带项目的问题的简化版本。 我有一个将文件解析为相关数据类型的模块(也就是示例中的电话类型)。所有数据都是 Double 但语义不同。在另一个模块中,我有使用数据的方法。每种方法都将数据类型(又名 HomePhone、WorkPhone)的不同排列作为参数。我本可以制作 HomePhone 和 WorkPhone 数据类型,甚至是新类型,但它会使使用数据的方法看起来很混乱,有很多模式匹配和其他东西。所以只是想知道我是否可以简化数据类型(又名电话),以便它更优雅一点并且仍然类型安全。干杯! 我想我应该执行以下操作?
type HomePhone = Int
type WorkPhone = Int
data Phone = HomePhone HomePhone
| WorkPhone WorkPhone
【问题讨论】:
-
它甚至可以编译吗?编译器可以在错误和警告中为您提供很多有用的信息。