HASKELL声明了一种类型方案



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

∀a,b.h(a→b)⇒B

这是来自4.1 Unmabiguity/A过载理论


后来在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)

另外,我意识到,对于此代码,无法通过添加诸如| b -> a之类的功能依赖性来使该类型变得明确,以匹配此传播规则

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

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

instance H (Int -> Bool) where
instance H (Char -> Bool) where
...

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

x :: ∀a,b. H(a → b) ⇒ b

我们需要计算

x && True

我们需要打字x :: Bool,但这仅确定b = Bool,而a = Inta = Char都可以使用。因此,类型是模棱两可的。

最新更新