我有以下类型系列:
{-# LANGUAGE TypeFamilyDependencies #-}
type family Const arr r = ret | ret -> r where
Const (_ -> a) r = Const a r
Const _ r = r
这只是Const
变相的功能,但 GHC 8.2.1 的注入检查器不会将其识别为注入 wrt。对其第二个论点:
* Type family equation violates injectivity annotation.
RHS of injective type family equation cannot be a type family:
Const (_ -> a) r = Const a r
* In the equations for closed type family `Const'
In the type family declaration for `Const'
|
4 | Const (_ -> a) r = Const a r
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
如果您忽略第一种情况,它会起作用,这让我相信功能已经存在,但还没有真正成熟。
我可以用其他方式制定这个,以便 GHC 识别注入性吗?它实际上是针对这个稍微复杂一点的情况(所以arr
真的被使用了):
{-# LANGUAGE TypeFamilyDependencies #-}
type family ReplaceRet arr r = ret | ret -> r where
ReplaceRet (a -> b) r = a -> ReplaceRet b r
ReplaceRet _ r = r