在显式类型注释的情况下,Haskell 检查推断类型是否至少与其签名一样多态,或者换句话说,推断类型是否是显式类型的子类型。因此,以下函数是错误类型的:
foo :: a -> b
foo x = x
bar :: (a -> b) -> a -> c
bar f x = f x
然而,在我的场景中,我只有一个函数签名并且需要验证它是否被一个潜在的实现“占据”——希望这个解释是有道理的!
由于参数化属性,我假设两者foo
都bar
没有实现,因此,两者都应该被拒绝。但我不知道如何以编程方式得出结论。
目标是整理出所有或至少一部分无效类型签名,如上面的那些。我很感激每一个提示。