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

时间:2017-03-22 19:38:35

标签: haskell generic-programming abstract-data-type

来自Data.IxSet库的

ixset提供了多列表,其中包含每列的索引和不存在列的计算索引。

如何在未编制索引的列中放置抽象值?

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

module Lib (Abstract, makeAbstract) where
data Abstract = Abstract (Int -> Int)
makeAbstract x = Abstract (\x -> 42 * x + y)

我可以使用Map String Abstract这样的法线贴图,因为值类型不受限制。但我不能IxSet Table (Map String Abstract, Map Int Abstract)

module User where
import Lib

data Table = Table { tKey1 :: String, tKey2 :: Int, tValue :: Abstract }

因为我需要提供instance Data Table。理想情况下,我希望newtype Opaque a = Opaque a拥有所有a所有必需实例,而不对其施加约束,并使用以下内容:

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

0 个答案:

没有答案