我有一些计算被标记为特定类型 (T) 的类型 ('A/'B)。我希望最终依赖于代码中的类型,因此我使用实例将类型映射回来:
data T = A | B -- also generates types 'A and 'B
class R (t :: T) where r :: Proxy t -> T
instance R 'A where r _ = A
instance R 'B where r _ = B
foo :: forall (t :: T) . R t => Bar T Int
foo = case r (Proxy :: Proxy t) of A -> ....
这没问题,但我想知道如果我有类型注释,我是否可以省去R t
一直写出约束的时间t
。是否可以重新组织此方案以更方便使用?谢谢。
(标题编辑:最初我写的是封闭类型家族,但这里它更像是给定类型的一组封闭类型。)