2

Haskell代数的データ型では、宣言に定数値を含めることは合法ですか?言い換えれば、私はこのようなものを定義できますか?

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

仕様から理解しようとしましたが、文法がわかりません。

4

1 に答える 1

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"
于 2012-12-10T02:38:37.553 に答える