Haskell声明来处理类型方案

时间:2019-03-13 10:36:16

标签: haskell type-inference

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

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

这是来自4.1 Unambiguity / A Theory of Overloading


稍后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'

1 个答案:

答案 0 :(得分:5)

由于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都可以使用。因此,该类型不明确。