Infix模式匹配

问题描述 投票:1回答:3

[我有时在Haskell编程时遇到的一个问题是有时我想将模式与值进行匹配,但是我只对有关值是否与模式匹配的真假信息感兴趣(例如,特定的数据类型构造函数) 。例如:

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

是否存在允许与上面的示例类似的特定语法?还是在这种情况下会派上用场的惯用法?

haskell functional-programming algebraic-data-types
3个回答
1
投票

您可以在函数定义中使用模式匹配来确定值:


1
投票

我不相信存在(或可能存在)中缀运算符,因为模式不是值;这是语法。


0
投票

您可以使用multi-way if-expressions和模式保护符来获取几乎所需的语法:

© www.soinside.com 2019 - 2024. All rights reserved.