如何做每个记录领域的东西?

时间:2013-07-06 08:23:50

标签: generics haskell

是否可以处理Haskell记录类型的字段?

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

我的猜测是,这可以通过使用模板haskell来实现,但目前我的代码是高度GHC.Generics为中心的。有没有使用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。

0 个答案:

没有答案