Haskell声明来处理类型方案

jac*_*ick 1 haskell type-inference

我想知道什么样的Haskell类型声明与下面的类型方案匹配?

?a,bH(a?b)?b

这是从4.1明确性/重载理论


稍后,请在chi的答案后进行编辑。我尝试了这段代码,但我不能让它失败

class H f where 
  g :: f -> Bool

instance H (Integer -> Bool) where
  g f = f 0

instance H (Char -> Bool) where
  g f = f '1'

g (\x -> if x > 10 then True else False)

g (\x -> if x == '0' then True else False)
Run Code Online (Sandbox Code Playgroud)

另外,我意识到对于此代码,通过添加功能| b -> a匹配(如匹配此传播规则)无法使类型明确

(FH) H (a —> b),H (a' —> b) => a = a'

chi*_*chi 5

由于H是类型类名称,因此可以接受多个实例

instance H (Int -> Bool) where
instance H (Char -> Bool) where
...
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如果我们有一个术语

x :: ?a,b. H(a ? b) ? b
Run Code Online (Sandbox Code Playgroud)

我们需要计算

x && True
Run Code Online (Sandbox Code Playgroud)

我们需要进行类型检查x :: Bool,但这只是决定b = Bool,同时兼具a = Inta = Char可以使用。因此,类型不明确。