Generics 每个记录字段怎么做?

Generics 每个记录字段怎么做?,generics,haskell,Generics,Haskell,是否可以处理Haskell记录类型的字段 像getPosition::RecordField->Int这样的东西可能就足够了。让我们以类型安全的方式基于记录字段的名称建立索引 我的猜测是,通过使用模板haskell,这是可行的,但目前我的代码高度以GHC.Generics为中心。是否有使用泛型的解决方案 编辑4:真实的东西 好的。。。我想我应该把整件事都包括进去: 所以我的目标是编写一个通用的KDTree。当前插入和删除工作正常,但我想根据上面字段的条件执行查询过滤器: query :: Qu

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

getPosition::RecordField->Int
这样的东西可能就足够了。让我们以类型安全的方式基于记录字段的名称建立索引

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

编辑4:真实的东西 好的。。。我想我应该把整件事都包括进去:

所以我的目标是编写一个通用的
KDTree
。当前插入和删除工作正常,但我想根据上面字段的条件执行
查询过滤器

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
query::query->kdtreea->kdtreea
数据Foo=Foo{fooA::Int,fooB::Int}派生(显示,通用)
数据FooQuery=FooAQuery排序Int
|食品查询排序整数
结果1=查询(FooAQuery LT 10)barTree
结果2=查询(FooQuery LT 10 FooBQuery EQ 0)barTree
这当然是高度推测性的语法。 我想通过模板Haskell可以创建这样的东西。。。但我希望有另一种方法来实现这一点



[1] 最后,这将不是一个
Vec排序
,而是将“优化”为单个
Int
,其中每个位表示对应字段是LTEQ还是GT。

这个想法听起来并不完全是类型安全的。不。。。不是从程序员的角度。但我希望为生成的库提供一个类型安全的API。如果您进一步解释您的目标,可能会有人提出更好的解决方案。@Florian Vec类型来自哪里?它是矢量包中的“矢量”还是用矢量包编码的“矢量”?哦。。。它是向量包中的
Vector