我正在尝试定义一种数据类型来存储RGB值。
data Color = RGB Int Int Int
black = RGB 0 0 0 但是,由于参数总是在范围[0-255]中,是否有一种方法可以将参数约束为数据构造函数,使值始终是有效的颜色?
发布于 2021-02-25 04:39:22
如注释所示,您可以使用Word8,它具有所需的范围。
import Data.Word(Word8)
data Color = Color Word8 Word8 Word8Word8实现了Num,因此您可以在其中使用常规整数常量。
对于“我有一个不能用类型表示的约束”这个问题,更普遍的解决方案是隐藏构造函数并创建一个检查接口。在您的案例中,这将表现为
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发布于 2021-02-25 04:35:00
我不确定它是否会像这样工作。但是有了一些典型的算术,这是可能的。
https://stackoverflow.com/questions/66362185
复制相似问题