没有类型的Haskell

use*_*424 10 haskell types

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

编辑:根据SO原则,这是一个狭隘的技术问题,而不是讨论不同编程方法的相对优点的请求.重新解释一下这个问题,"Haskell的使用是否可以避免类型冲突完全是程序员的责任?"

Pub*_*bby 8

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

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

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

  • 正如Pubby所说,这与动态类型不同*.具体来说,区别在于:假设`-fdefer-type-errors`并考虑`addOne x = x + 1`定义的函数`addOne :: a - > a`.这显然有一个类型错误,并将其称为"addOne"x"`将适当地错误输出.但是,`addOne(1 :: Int)`将(据我理解)*也*错误:即使代码在这种情况下偶然发生,*它仍然是错误的*,你会得到错误*会在编译时得到. (5认同)
  • 它不提供类型系统的自由.它并不意味着关闭类型系统,只是在编译时如果有问题的错误与`main`无关,则将其延迟. (2认同)

Tik*_*vis 8

另外,还可以查看Data.Dynamic哪些内容允许您在代码的某些部分中使用动态类型值,而无需在整个过程中禁用类型检查.


rot*_*off 7

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

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

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