SPECIALISE fails with a cryptic warning
Example:
{-# LANGUAGE TypeFamilies #-}
module A where
type family T a
type instance T Int = Bool
foo :: Num a => a -> T a
foo = undefined
{-# SPECIALISE foo :: Int -> Bool #-}
GHC produces this warning:
RULE left-hand side too complicated to desugar
case cobox of _ { GHC.Types.Eq# cobox ->
(foo @ Int $dNum)
`cast` (<Int> -> cobox :: (Int -> T Int) ~# (Int -> Bool))
}
Given that rewrite rules don't reliably work in the presence of type families, I somewhat suspect that GHC won't be able to generate a sensible specialisation here but it should produce a better diagnostic.
Edited by Edward Z. Yang