是否可以处理Haskell记录类型的字段?
getPosition :: RecordField -> Int
这样的东西可能足以满足我的目的。让我按照类型安全的方式根据记录字段的名称进行索引的东西。
我的猜测是,这可以通过使用模板haskell来实现,但目前我的代码是高度GHC.Generics
为中心的。有没有使用Generics的解决方案?
好的......我想我应该包括整个事情:
所以我的目标是写一个通用的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。