我有一个具有关联类型的类型类:
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要求完全披露我的原始意图的请求:
我正在尝试仅使用一小组“原语”(即-单位,总和和乘积)来构建类型的表示形式。 而且,对于复合类型,我想在组成新类型的字段中使用预先存在的表示形式实例的帮助。 对于显式参数化的字段类型,这很简单。 但是,我也希望能够使用现有的隐藏类型参数对字段类型进行此操作。
答案 0 :(得分:3)
无法完成。存在量化类型仅在运行时选择,而类型族实例化(关联的或其他方式)必须在编译时固定。
这可能是XY problem。您应该以其他方式处理类型信息,而不要使用关联的类型族,但这需要了解您要解决的问题才能说出方法。