3
我想知道Haskell和ML的Type系统之间的完全区别。我不需要一般的区别,只需要区分他们的类型系统。在Haskell和ML之间输入系统差异
而且还可以请人解释为什么这些差异在Haskell介绍?(为了简化任何优势)
先谢谢了!
我想知道Haskell和ML的Type系统之间的完全区别。我不需要一般的区别,只需要区分他们的类型系统。在Haskell和ML之间输入系统差异
而且还可以请人解释为什么这些差异在Haskell介绍?(为了简化任何优势)
先谢谢了!
在整个这个答案我要谈谈Haskell 98和SML。
这两种类型的系统都有相同的基础,System F。这意味着你有基本的参数多态性
foo :: a -> b -> a
foo : 'a -> 'b -> 'c
SML提供仿函数和模块和Haskell类型类,但是这两个是真正建立在核心结石的顶部。
最有意思的区别是,Haskell是系统固件,这是系统F.特别的一辆加大马力的后续版本,它提供各种更为丰富的概念(该种类型),允许对于像
data Foo f a = Foo (f a)
注意这里f
是一个从一个类型到另一个类型的函数,它换句话说就是* -> *
。事实上,Haskell 98 + Type系列+ PolyKinds + DataKinds通过允许任意类型的函数进一步扩展了这一点。这给你类似简单类型的lambda微积分。例如,下面的类型层次的邱奇数列出
{-# LANGUAGE TypeFamilies, EmptyDataDecls #-}
-- So we can box things up to partially apply them
type family Eval e
type instance Eval (Car a b) = a
type instance Eval (Cdr a b) = b
type instance Eval (Cons a b f) = Eval (f a b)
data Car a b
data Cdr a b
data Cons a b (f :: * -> * -> *)
type First p = Eval (p Car)
type Second p = Eval (p Cdr)
foo :: First (Cons (First (Cons Int Bool)) String)
foo = 1
这不是在SML的核心类型系统表达的,但是有仿函数,一个可以破解解决这个问题。
“我只是好奇这两种语言哪一个更优秀”。这对于stackoverflow而言是无关紧要的,因为它是一个“[问题]要求我们推荐或找到一个工具,库或最喜欢的非现场资源,因为它们倾向于吸引自以为是的答案和垃圾邮件,描述问题以及迄今为止解决问题所做的工作。“ – Cirdec