首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据构造函数的参数约束

问数据构造函数的参数约束
EN

Stack Overflow用户
提问于 2021-02-25 03:56:16
回答 2查看 100关注 0票数 1

我正在尝试定义一种数据类型来存储RGB值。

代码语言:javascript
复制
data Color = RGB Int Int Int

black = RGB 0 0 0 

但是,由于参数总是在范围[0-255]中,是否有一种方法可以将参数约束为数据构造函数,使值始终是有效的颜色?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-25 04:39:22

如注释所示,您可以使用Word8,它具有所需的范围。

代码语言:javascript
复制
import Data.Word(Word8)

data Color = Color Word8 Word8 Word8

Word8实现了Num,因此您可以在其中使用常规整数常量。

对于“我有一个不能用类型表示的约束”这个问题,更普遍的解决方案是隐藏构造函数并创建一个检查接口。在您的案例中,这将表现为

代码语言:javascript
复制
data Color = Color Int Int Int -- Don't export the constructor

color :: Int -> Int -> Int -> Maybe Color
color r g b
 | r < 256 && g < 256 && b < 256 = Just (Color r g b)
 | otherwise = Nothing
票数 4
EN

Stack Overflow用户

发布于 2021-02-25 04:35:00

GADT的可能会对此有所帮助

我不确定它是否会像这样工作。但是有了一些典型的算术,这是可能的。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66362185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档