是否可以在 Haskell 记录类型的字段上工作?
像我这样的东西getPosition :: RecordField -> Int
可能就足够了。让我以类型安全的方式根据记录字段的名称进行索引。
我的猜测是,这可以通过使用模板 haskell 来实现,但目前我的代码是高度GHC.Generics
中心化的。有没有使用泛型的解决方案?
编辑4:真实的东西
好的......我想我应该只包括整个事情:
所以我的目标是写一个通用的KDTree
. 目前插入和删除工作正常,但我想query filters
根据上面字段的条件来做:
query :: Query -> KDTree a -> KDTree a
data Foo = Foo {fooA :: Int, fooB :: Int} deriving (Show,Generic)
data FooQuery = FooAQuery Ordering Int
| FooBQuery Ordering Int
result1 = query (FooAQuery LT 10) barTree
result2 = query (FooAQuery LT 10 <> FooBQuery EQ 0) barTree
这当然是高度推测性的语法。我想可以通过 Template Haskell 创建类似的东西......但我希望有另一种方法来实现这一点。
[1] 最后,这将不是一个Vec Ordering
,而是将被“优化”成一个Int
,其中每个位表示相应的字段是 LTEQ 还是 GT。