1

是否可以在 Haskell 记录类型的字段上工作?

像我这样的东西getPosition :: RecordField -> Int可能就足够了。让我以类型安全的方式根据记录字段的名称进行索引。

我的猜测是,这可以通过使用模板 haskell 来实现,但目前我的代码是高度GHC.Generics中心化的。有没有使用泛型的解决方案?

编辑4:真实的东西

好的......我想我应该只包括整个事情:

http://pastebin.com/kaZjTBnH

所以我的目标是写一个通用的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。

4

0 回答 0