-
62 votesanswersviews
关于类型安全的Haskell类型与newtype [关闭]
我知道 newtype 经常被比作Haskell中的 data ,但我从更多的设计观点而非技术问题中提出这种比较 . 在不完全/ OO语言中,存在反模式“primitive obsession”,其中原始类型的大量使用降低了程序的类型安全性并且引入了相同类型值的意外互换性,否则用于不同目的 . 例如,很多东西都可以是String,但如果编译器可以静态地知道我们的名字是什么以及我们想要成为地址中的城... -
16 votesanswersviews
`([] ==)[]`的类型如何推断出haskell?
这听起来很傻,但我无法得到它 . 为什么表达式[] == []可以输入?更具体地说,哪种类型(在类Eq中)被推断为列表元素的类型? 在ghci会话中,我看到以下内容: Prelude> :t (==[]) (==[]) :: (Eq [a]) => [a] -> Bool 但约束 Eq [a] 也暗示 Eq a ,如下所示: Prelude> (==[]) ([]::[I... -
6 votesanswersviews
在haskell中,为什么我需要指定类型约束,为什么编译器不能解决它们?
考虑一下这个功能 add a b = a + b 这有效: *Main> add 1 2 3 但是,如果我添加一个类型签名,指定我想添加相同类型的东西: add :: a -> a -> a add a b = a + b 我收到一个错误: test.hs:3:10: Could not deduce (Num a) from the context () ... -
82 votesanswersviews
为什么我不能使String成为类型类的实例?
Given : data Foo = FooString String … class Fooable a where --(is this a good way to name this?) toFoo :: a -> Foo 我想让 String 成为 Fooable 的一个实例: instance Fooable String where toFoo = FooSt... -
25 votesanswersviews
推断类型似乎检测到无限循环,但实际发生了什么?
在Andrew Koenig的An anecdote about ML type inference中,作者使用merge sort的实现作为ML的学习练习,很高兴找到“不正确”的类型推断 . 令我惊讶的是,编译器报告了一种'list - > int列表换句话说,这个sort函数接受任何类型的列表并返回一个整数列表 . 那是不可能的 . 输出必须是输入的排列;它怎么可能有不同的类型?读者... -
19 votesanswersviews
理解Hindley-Milner型推理中的多义性
我正在阅读关于Hindley–Milner Type Inference的维基百科文章,试图从中找出一些意义 . 到目前为止,这是我所理解的: 类型分为单型或多型 . Monotypes进一步分类为类型常量(如 int 或 string )或类型变量(如 α 和 β ) . 类型常量可以是具体类型(如 int 和 string )或类型构造函数(如 Map 和 Set ) . 类型... -
200 votesanswersviews
动态类型语言与静态类型语言
与静态类型语言相比,动态类型语言的优点和局限是什么? See also :whats with the love of dynamic languages(一个更具争议性的话题......) -
40 votesanswersviews
为什么动态打字经常与口译语言相关联?
简单的问题:我在编译语言(如C / Java)和Python / Javascript等解释语言中进行了大量编程(专业和个人) . 我个人发现,当我使用静态类型语言编程时,我的代码几乎总是更强大 . 但是,我遇到的几乎所有解释语言都使用动态类型(PHP,Perl,Python等) . 我知道为什么编译语言使用静态类型(大多数时候),但我无法弄清楚解释语言设计中对静态类型的厌恶 . 为什么陡峭断开?... -
36 votesanswersviews
哪些语言是动态类型和编译的(哪些是静态类型和解释的)?
在我对动态和静态类型的阅读中,我不断反对编译静态类型语言的假设,同时解释动态类型语言 . 我知道一般来说这是真的,但我对异常感兴趣 . 我真的希望有人不仅可以提供这些例外的一些例子,而是试图解释为什么决定这些语言应该以这种方式工作 . -
57 votesanswersviews
为什么Haskell代数数据类型“封闭”?
如果我错了,请纠正我,但似乎Haskell中的代数数据类型在许多你将在OO语言中使用类和继承的情况下都很有用 . 但是有一个很大的区别:一旦声明了代数数据类型,它就无法在其他地方扩展 . 它是“封闭的” . 在OO中,您可以扩展已定义的类 . 例如: data Maybe a = Nothing | Just a 以后我无法以某种方式为此类型添加另一个选项而不修改此声明 . 那么这个系统有什么好... -
6 votesanswersviews
行类型级别列表的多态相等
TL;DR: 我想使用 type family RIso (a :: [*]) (b :: [*]) :: Bool 实现行多态的统一,但是已经卡住了 . 背景 我正在为一种具有效果系统的语言编写一个编译器,该系统使用行多态,如Extensible Records with Scoped Labels,表示附加到函数类型的效果集 . 也就是说,在这种语言中,函数箭头的类型是: (->) :... -
4 votesanswersviews
Scala:高级类型作为类型参数
请考虑以下代码段(它演示了我实际问题的简化版本): trait Id[Type[_]] { def id[S]: S => Type[S] } trait IdTransformer[Type[_]] { type Result[_] // depends of Type def idTransform[P]: P => Result[P] def composeW...