2012-12-10 63 views
2

它是合法的Haskell的代数数据类型有在声明常数值?换句话说,我可以定义是这样的:常量在Haskell代数数据类型

data HttpStatusCodes = BadRequest "Bad request" 400 
        | NotAuthorized "Not authorized" 401 
        | -- ... 

我试图从规范看着办吧,但语法不是很清楚,我。

+1

不,这是不合法的。它也没有意义;你想做什么? – shachaf

+0

昨天晚上发布了这个问题后,再想一想,我相信我正在努力去做@Zoidberg的回答。 – Ralph

回答

10

不,你不能做到这一点(数据类型类型,不数据)。相反,你可以做到以下几点:

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"