Haskell代数的データ型では、宣言に定数値を含めることは合法ですか?言い換えれば、私はこのようなものを定義できますか?
data HttpStatusCodes = BadRequest "Bad request" 400
| NotAuthorized "Not authorized" 401
| -- ...
仕様から理解しようとしましたが、文法がわかりません。
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"