Tan*_*aki 5 haskell types filtering instance data-partitioning
我已经定义了类似于以下的Haskell类型:
data TypeData = TypeA Int | TypeB String | TypeC Char deriving (Eq, Show)
Run Code Online (Sandbox Code Playgroud)
在某些时候,我需要一种方法来过滤[TypeData]所有非TypeC实例.我想写的函数的签名是:
-- Returns a tuple containing (TypeC elements, non-TypeC elements)
partitionTypeCs :: [TypeData] -> ([TypeData],[TypeData])
Run Code Online (Sandbox Code Playgroud)
该partition功能似乎适合这个:
-- Attempt:
partitionTypeCs data = partition (TypeData -> Bool) data
Run Code Online (Sandbox Code Playgroud)
但是,我无法弄清楚哪种函数与类型签名相匹配TypeData -> Bool.看起来我需要一个可以确定类型实例是否属于特定实例的函数.我知道我可以通过编写另一个函数(isTypeC (TypeC _) = True)来使用模式匹配,但是有更通用的方法或匹配类型实例的线条方式吗?
我会这样做:
partitionTypeCs = partition f where
f (TypeC _) = False
f _ = True
Run Code Online (Sandbox Code Playgroud)
我必须承认,我不明白为什么你不喜欢这个.您无法与使用相等的构造函数进行比较,因为涉及未知参数.模式匹配完全可以在这里完成.
| 归档时间: |
|
| 查看次数: |
181 次 |
| 最近记录: |