为什么下面的代码不能在 Haskell 中编译?
g :: (a->a) -> (Char, Bool)
g f = (f 'z', f True)
Run Code Online (Sandbox Code Playgroud)
据我了解,Haskell 尝试推断最通用的类型,然后检查我的类型是否是从 Haskell 推断类型推断出来的。在这种情况下,获得了一个不可解析的约束系统:f 应用于“z”,因此 f 的类型为Char -> *。但在本例中,f 应用于 True,因此 f 必须是 类型Bool -> *,但Char和Bool并不统一。但为什么,如果我明确指定类型,Haskell 根本无法检查我的猜测是否正确?毕竟我指定的类型在函数下接近。