【发布时间】:2018-07-24 04:34:11
【问题描述】:
在显式类型注释的情况下,Haskell 检查推断类型是否至少与其签名一样多态,或者换句话说,推断类型是否是显式类型的子类型。因此,以下函数是错误类型的:
foo :: a -> b
foo x = x
bar :: (a -> b) -> a -> c
bar f x = f x
然而,在我的场景中,我只有一个函数签名,需要验证它是否被潜在实现“占用” - 希望这个解释完全有道理!
由于参数属性,我假设foo 和bar 都不存在实现,因此,两者都应该被拒绝。但我不知道如何以编程方式得出结论。
目标是整理出所有或至少一部分无效类型签名,如上面的那些。我很感激每一个提示。
【问题讨论】:
-
您可能会发现
djinn-lib和/或djinn-ghc有点帮助。另见djinn。另请参阅 hedonisticlearning.com/djinn 并注意 lambdabot 也知道如何使用 djinn。
标签: haskell polymorphism parametric-polymorphism hindley-milner