是否可以将唯一的,由运行时确定的标签附加到选定的对象上?

时间:2018-07-25 08:00:21

标签: haskell types subtyping

考虑由谓词B确定的类型A及其子类型P。一个实例将是B的自然数和A的质数,其中一些素数测试为P。为这样的A实现智能构造函数很简单,定义为newtypeTagged

现在假定子类型谓词在编译时尚未完全确定。例如,假设PIO输入所确定的集合的成员资格:运算符输入整数多项式的系数,并且我们得到一个谓词,该谓词可验证给定数字是否为该多项式的值,一些索引。

我可以确保每个多项式及其验证的值的标记方式均使其相互兼容,而又与任何其他多项式都不兼容吗?所需的是值及其索引之间的转换,我想输入保护它们以避免混淆。

这就是我的想象:

polynomial :: [Integer] -> Polynomial unique

toValue   :: Integer -> Polynomial unique -> Value unique

fromValue :: Integer -> Polynomial unique -> Maybe (Index unique)

toValue'   :: Index unique -> Value unique

fromValue' :: Value unique -> Index unique

重点是获得后两个 total 函数。

但是我不知道如何定义此polynomial函数。它将从哪里获得unique类型?

1 个答案:

答案 0 :(得分:1)

要以类似ST的方式进行操作,您需要一个函数库来对exportValue s类型进行操作,然后具有一个具有以下类型的函数:

Polynomial s

这会将withPolynomial :: (forall s . Polynomial s -> Integer) -> [Integer] -> Integer 转换为[Integer]并将其传递给参数函数。然后,该函数将在适当的地方使用您的函数库来执行所需的操作。保证任何Polynomial s值都不会从封闭的Value s应用程序中泄漏出来,因此不会混淆。但是,这也将阻止您存储多项式及其值以用于将来的计算。