在 Haskell 代数数据类型中声明常量值是否合法?换句话说,我可以定义这样的东西吗:
data HttpStatusCodes = BadRequest "Bad request" 400
| NotAuthorized "Not authorized" 401
| -- ...
我试图从规范中弄清楚,但我不清楚语法。
最佳答案
不,你不能这样做(数据类型是类型,而不是数据)。相反,您可以执行以下操作:
data HTTPStatus = HTTPStatus Int String
badRequest, notAuthorized, notFound :: HTTPStatus
badRequest = HTTPStatus 400 "Bad Request"
notAuthorized = HTTPStatus 401 "Not Authorized"
notFound = HTTPStatus 404 "Not Found"
或者,类似的:
data HTTPStatus = BadRequest | NotFound
code :: HTTPStatus -> Int
code BadRequest = 400
code NotFound = 404
message :: HTTPStatus -> String
message BadRequest = "Bad Request"
message NotFound = "Not Found"
关于haskell - Haskell 代数数据类型中的常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13794132/