2013-12-16 45 views
3

我想知道Haskell和ML的Type系统之间的完全区别。我不需要一般的区别,只需要区分他们的类型系统。在Haskell和ML之间输入系统差异

而且还可以请人解释为什么这些差异在Haskell介绍?(为了简化任何优势)

先谢谢了!

+1

“我只是好奇这两种语言哪一个更优秀”。这对于s​​tackoverflow而言是无关紧要的,因为它是一个“[问题]要求我们推荐或找到一个工具,库或最喜欢的非现场资源,因为它们倾向于吸引自以为是的答案和垃圾邮件,描述问题以及迄今为止解决问题所做的工作。“ – Cirdec

回答

12

在整个这个答案我要谈谈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的核心类型系统表达的,但是有仿函数,一个可以破解解决这个问题。

相关问题