我遇到数据类型的值构造函数也应该是一个类型,例如,如果我有:
data Person = Student {name :: String, age :: Int}
| Staff {name :: String, salary :: Float} deriving (Show)
我这样误用了:
type St = Student
或
使用学生作为类型的任何地方,例如[Student]
也是错误的
我知道我不能这样做,因为Student
不是一个类型!那么如何使值构造函数Student
可以用作类型?这是不合法的吗?
答案 0 :(得分:6)
您希望Student
成为与Person
和Staff
不同的类型吗?然后让它们成为不同的类型。
data Person = StudentPerson Student
| StaffPerson Staff
deriving (Show)
data Student = Student {name :: String, age :: Int} deriving (Show)
data Staff = Staff {name :: String, salary :: Float} deriving (Show)
他们现在是不同的类型。你可以控制你想要的东西。并且您不会意外地生成部分函数,例如age
和salary
。或者