haskell - 给定 Haskell 类型签名,是否可以自动生成代码?

标签 haskell types

标题中所说的内容。如果我编写类型签名,是否可以通过算法生成具有该类型签名的表达式?

这似乎是可行的。我们已经知道,如果该类型是库函数类型签名的特例,Hoogle 可以通过算法找到该函数。另一方面,许多与一般表达式相关的简单问题实际上是无法解决的(例如,不可能知道两个函数是否执行相同的操作),因此这就是其中之一也很难令人难以置信。

同时提出几个问题可能不太好,但我想知道:

  • 可以吗?

  • 如果是这样,怎么办?

  • 如果不能,是否有任何限制情况可以实现?

  • 两个不同的表达式很可能具有相同的类型签名。你能计算出全部吗?或者甚至是其中的一些

  • 有人有真正可以实现这些功能的工作代码吗?

最佳答案

Djinn对 Haskell 类型的受限子集执行此操作,对应于一阶逻辑。但它无法管理递归类型或需要递归实现的类型;因此,例如,它不能编写 (a -> a) -> a 类型的术语(fix 的类型),它对应于命题“如果a意味着a,那么a”,这显然是错误的;你可以用它来证明任何事情。事实上,这就是 fix 产生 ⊥ 的原因。

如果您确实允许修复,那么编写一个程序来给出任何类型的术语就很简单了;该程序将简单地为每种类型打印fix id

Djinn 主要是一个玩具,但它可以做一些有趣的事情,例如根据给定的条件为 ReaderCont 派生正确的 Monad 实例return(>>=) 类型。您可以通过安装 djinn 来尝试一下包,或使用lambdabot ,它将其集成为 @djinn 命令。

关于haskell - 给定 Haskell 类型签名,是否可以自动生成代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10205793/

相关文章:

haskell - 导入模块进行测试

haskell - 如何将本地版本的库与 cabal 链接

c++ - 用 unsigned char 算术

typescript - 是否可以基于对象属性进行动态类型?

haskell - IO 是免费的 Monad 吗?

optimization - GHC 中的嵌套解包

haskell - 类型同义词导致类型错误

python - 在 Python 中检查类型的规范方法是什么?

java - 具有类型安全类参数的通用(非静态)方法,它是如何工作的?

scala - 使用 Scala、OCaml 和 Haskell 中的类型捕获图形规则