【问题标题】:How to write a type instance for a compound type having existentially quantified type variables?如何为具有存在量化类型变量的复合类型编写类型实例?
【发布时间】:2018-09-05 14:43:40
【问题描述】:

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

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 要求全面披露我的初衷:

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

【问题讨论】:

    标签: haskell typeclass existential-type associated-types


    【解决方案1】:

    这是不可能的。仅在运行时选择存在量化类型,而类型族实例化(关联或其他)必须在编译时固定。

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

    【讨论】:

    • 感谢您的回复。按照您的要求,我已按照最初的意图编辑了原始帖子。
    • 好的,但是这个描述有点模糊。也许您应该在一个新问题中正确解释它。您想要的可能只能使用 Template Haskell 或仅使用 GHC 泛型。
    猜你喜欢
    • 2015-05-29
    • 1970-01-01
    • 1970-01-01
    • 2013-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-10
    • 2019-11-08
    相关资源
    最近更新 更多