如何为具有现有量化类型变量的复合类型编写类型实例?

时间:2018-09-05 14:43:40

标签: haskell typeclass existential-type associated-types

我有一个具有关联类型的类型类:

class Foo a where
  type Bar a :: *
  ...

现在,我想将此类实例化为包含存在量化类型变量的复合类型:

data Blat = forall a. Blat a

instance Foo Blat where
  type Bar Blat = ???

在我的实际应用中,“ ???”为了使程序逻辑正确,需要使用Blat a中存在的隐藏的“ a”。

在Haskell中这可行吗?
如果可以,怎么办?

===

响应@leftaroundabout要求完全披露我的原始意图的请求:

我正在尝试仅使用一小组“原语”(即-单位,总和和乘积)来构建类型的表示形式。 而且,对于复合类型,我想在组成新类型的字段中使用预先存在的表示形式实例的帮助。 对于显式参数化的字段类型,这很简单。 但是,我也希望能够使用现有的隐藏类型参数对字段类型进行此操作。

1 个答案:

答案 0 :(得分:3)

无法完成。存在量化类型仅在运行时选择,而类型族实例化(关联的或其他方式)必须在编译时固定。

这可能是XY problem。您应该以其他方式处理类型信息,而不要使用关联的类型族,但这需要了解您要解决的问题才能说出方法。