Haskell代数数据类型中的常量

Haskell代数数据类型中的常量,haskell,constants,algebraic-data-types,Haskell,Constants,Algebraic Data Types,在Haskell代数数据类型中,在声明中使用常量值合法吗?换句话说,我可以这样定义吗: data HttpStatusCodes = BadRequest "Bad request" 400 | NotAuthorized "Not authorized" 401 | -- ... 我试图从规范中找出它,但语法对我来说不清楚。不,不允许这样做(数据类型是类型,而不是数据)。相反,您可以执行以下操作: data

在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"

不,这是不合法的。这也没有什么意义;你想做什么?在昨晚发布了这个问题,并进一步思考之后,我相信我正试图做@Zoidberg'所回答的事情。