Я определил тип 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
), но есть ли более общий или линейный способ сопоставления экземпляров типов?