如何指定具有多参数单射性的类型族?

问题描述 投票:0回答:1

我有一个类型类

A
与非单射关联类型
Context

class A a where
   type Context a

如此多的

A
实例可以具有相同的
Context

A
的一些实例也是
AA
类的实例,该类具有两个附加关联类型:
B
C

class (A a) => AA a where
   type B a
   type C a
   problematic :: Context a -> B a -> C a -> a

目的是给定一个

Context
B a
C a
的组合唯一地标识
a
,但我不知道如何表达这一点。

我知道可以做出这样的约束

class A a where
   type B a = b | b -> a

,但我需要的是某种具有多个参数的约束,例如

(Context a, B a, C a) -> a
。如何才能实现这一目标?

haskell typeclass type-constraints type-families
1个回答
0
投票

也许您可以退回一双。我还没有测试过,但它看起来像这样:

type family Fst a where Fst '(a, b) = a
type family Snd a where Snd '(a, b) = b
type B a = Fst (BC a)
type C a = Snd (BC a)

class A a => AA a where
    type BC a = b | b -> a
© www.soinside.com 2019 - 2024. All rights reserved.