我定义了一个类似于以下的 Haskell 类型:
data TypeData = TypeA Int | TypeB String | TypeC Char deriving (Eq, Show)
在某些时候,我需要一种方法来过滤[TypeData]
所有非 TypeC 实例。我正在尝试编写的函数的签名是:
-- Returns a tuple containing (TypeC elements, non-TypeC elements)
partitionTypeCs :: [TypeData] -> ([TypeData],[TypeData])
该partition
功能似乎适合此:
-- Attempt:
partitionTypeCs data = partition (TypeData -> Bool) data
但是,我无法弄清楚什么函数会匹配类型签名TypeData -> Bool
。看起来我需要一个可以确定类型实例是否属于特定实例的函数。我知道我可以通过编写另一个函数 ( isTypeC (TypeC _) = True
) 来使用模式匹配,但是是否有更通用的方式或匹配类型实例的 lineline 方式?