Проблема, с которой я иногда сталкиваюсь при программировании на Haskell, заключается в том, что иногда я хочу сопоставить шаблон со значением, но меня интересует только информация истина-ложь о том, соответствует ли значение шаблону (например, спецификация c конструктор типа данных). Например:
data Color =
RGB Int Int Int
| Greyscale Int
toHex :: Color -> String
toHex color =
if isGreyscale color then something
else somethingElse
where
isGreyscale :: Color -> Bool
isGreyscale (Greyscale _) = True
isGreyscale _ = False
, тогда как я хотел бы сделать сопоставление с образцом без создания ненужной вспомогательной функции, что-то вроде:
toHex :: Color -> String
toHex color =
if (color ~~ (Greyscale _)) then something
else somethingElse
Есть ли специфика c синтаксис, разрешающий что-то похожее на пример выше? Или, может быть, идиома, которая может пригодиться в таких ситуациях?