12

是否可以禁用或解决 Haskell 中的类型系统?在某些情况下,如 Forth 和 BCPL 中的所有内容都没有类型化或 Mathematica 中的单类型化很方便。我正在考虑将所有内容声明为相同类型或完全禁用类型检查。

编辑:根据 SO 原则,这是一个狭窄的技术问题,而不是要求讨论不同编程方法的相对优点。换个说法,“Haskell 的使用方式可以避免类型冲突完全是程序员的责任吗?”

4

4 回答 4

10

另请查看Data.Dynamic哪些允许您在部分代码中具有动态类型的值,而不会在整个过程中禁用类型检查。

于 2012-05-25T02:41:30.807 回答
9

GHC 7.6(尚未发布)具有类似的功能-fdefer-type-errors

http://hackage.haskell.org/trac/ghc/wiki/DeferErrorsToRuntime

它将所有类型错误推迟到运行时。它并不是真正的无类型,但它允许几乎同样多的自由。

于 2012-05-25T02:29:52.687 回答
8

即使有fdefer-type-errors一个也不会避免类型系统。它也确实不允许类型独立。该标志的要点是允许编译具有类型错误的代码,只要Main函数不调用错误。特别是,任何带有类型错误的代码,当被 Haskell 解释器实际调用时,仍然会失败。

虽然 Haskell 中无类型函数的前景可能很诱人,但值得注意的是,类型系统确实是该语言的核心。代码在编译中证明了自己的功能,类型系统的刚性防止了大量的错误。

或许如果你给出了你遇到的问题的一个具体例子,社区可以解决它。数字类型之间的相互转换是我之前问过的问题,并且有很多很好的技巧。

于 2012-05-25T05:39:20.213 回答
0

也许fdefer-type-errors 结合https://hackage.haskell.org/package/base-4.14.1.0/docs/Unsafe-Coerce.html可以满足您的需求。

于 2022-01-31T10:14:01.333 回答