为什么这个注射型家族实际上不是注射型



我试过这个:

{-# LANGUAGE TypeFamilyDependencies #-}
module Injective where
type family F (a :: *) = (fa :: *) | fa -> a
convert :: F a ~ F b => a -> b
convert x = x

GHC 8.6.4给了我这个错误

    • Could not deduce: a ~ b
      from the context: F a ~ F b
        bound by the type signature for:
                   convert :: forall a b. (F a ~ F b) => a -> b
        at Injective.hs:6:1-30

为什么?当然,注入性的全部意义在于人们可以从F a ~ F b中推断出a ~ b

事实证明,

这是GHC中的一个已知问题。显然,这是因为它尚未被证明是合理的。

相关内容

  • 没有找到相关文章

最新更新