Haskell IxSet中的抽象数据类型/未索引列

Haskell IxSet中的抽象数据类型/未索引列,haskell,generic-programming,abstract-data-type,Haskell,Generic Programming,Abstract Data Type,Data.IxSetfromIxSetlibrary为每列提供索引,为不存在的列提供计算索引 如何将抽象值放在未索引的列中 这里有一个例子。我有一个Lib模块,它导出Abstract类型,没有任何构造函数,但有一些函数来处理不透明值 module Lib (Abstract, makeAbstract) where data Abstract = Abstract (Int -> Int) makeAbstract x = Abstract (\x -> 42 * x + y) 我

Data.IxSet
from
IxSet
library为每列提供索引,为不存在的列提供计算索引

如何将抽象值放在未索引的列中

这里有一个例子。我有一个
Lib
模块,它导出
Abstract
类型,没有任何构造函数,但有一些函数来处理不透明值

module Lib (Abstract, makeAbstract) where
data Abstract = Abstract (Int -> Int)
makeAbstract x = Abstract (\x -> 42 * x + y)
我可以使用普通映射,比如
映射字符串抽象
,因为值类型在那里是不受约束的。但是我不能有
IxSet表
,它有点像
(Map String Abstract,Map Int Abstract)

因为我需要提供一个
实例数据表
。理想情况下,我希望有
newtype Opaque a=Opaque a
,它具有任何
a
的所有必要实例,而不对其施加约束,并使用类似以下内容:

data Table = Table { tKey1 :: String, tKey2 :: Int, tValue :: Opaque Abstract }
  deriving (Data, Typable, ...)

为什么要求您提供
实例数据表
?我不记得
ixset
的这个要求。我认为只有
ixGen
才需要它。是的,只有
ixGen
才需要它,但是你不会在抽象类型上使用
ixGen
,所以我仍然不理解这个问题。你能提供一个
实例索引表的例子吗<代码>表
不是抽象的,但它有一个抽象字段
data Table = Table { tKey1 :: String, tKey2 :: Int, tValue :: Opaque Abstract }
  deriving (Data, Typable, ...)