gpt4 book ai didi

haskell - 中缀模式匹配

转载 作者:行者123 更新时间:2023-12-01 21:50:04 24 4
gpt4 key购买 nike

我在 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

是否有特定的语法允许类似于上面示例的内容?或者在这种情况下可能会派上用场的成语?

最佳答案

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

你正在寻找一个case表达式

toHex :: Color -> String
toHex color = case color of
Greyscale _ -> something
otherwise -> somethingElse

虽然你通常会把它写成

toHex :: Color -> String
toHex (Greyscale _) = something
toHex _ = somethingElse

这实际上是对上面代码的脱糖。

GHC 中还有 LambdaCase 扩展,它允许您编写以下内容,从而消除不必要的变量 color

{-# LANGUAGE LambdaCase #-}


toHex :: Color -> String
toHex = \case
Greyscale _ -> something
otherwise -> somethingElse

关于haskell - 中缀模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59652199/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com