Gus*_*ten 8 haskell typeclass type-constraints type-families
我有一个A
具有非单射关联类型的类型类Context
class A a where
type Context a
Run Code Online (Sandbox Code Playgroud)
如此多的实例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
Run Code Online (Sandbox Code Playgroud)
目的是给定 a 、和uniqueidentityContext
的组合,但我不知道如何表达这一点。B a
C a
a
我知道可以做出这样的限制
class A a where
type B a = b | b -> a
Run Code Online (Sandbox Code Playgroud)
,但我需要的是某种具有多个参数的约束,例如(Context a, B a, C a) -> a
. 如何才能实现这一目标?
也许你可以退回一双。我还没有测试过这个,但它看起来像这样:
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
Run Code Online (Sandbox Code Playgroud)
您可能需要一些类型的签名来给类型检查器一个提示;类型检查器的编译时级别版本倾向于比运行时级别版本更早地单态化其类型。
归档时间: |
|
查看次数: |
111 次 |
最近记录: |