Haskell和ML之间的类型系统差异

贾斯汀·凯瑞(Justin Carrey)

我想知道Haskell和ML的Type系统之间的完全区别。我不需要一般的差异,只需要它们的Type系统上的差异。

还有谁能解释为什么Haskell引入了这些差异?(出于简单性的考虑)

提前致谢!

丹尼尔·格拉泽(Daniel Gratzer)

在整个答案中,我将讨论Haskell 98和SML。

这两种类型的系统都具有相同的基础实在,系统F这意味着您具有基本的参数多态性

foo :: a -> b -> a
foo : 'a -> 'b -> 'c

SML提供函子和模块以及Haskell类型类,但它们实际上都是基于核心演算构建的。

最有趣的区别是Haskell是System Fw,它是System F的增强版本。特别是,它提供了更丰富的类型(类型类型)概念,可用于

data Foo f a = Foo (f a)

注意这里f是一个从一个类型到另一个类型的函数,换句话说,它是善良的* -> *实际上,Haskell 98 +类型家族+ 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的核心类型系统中无法表达,但是有了函子,人们可以解决这个问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Haskell和Idris之间的差异:类型Universe中运行时/编译时的反映

来自分类Dev

Clojure中类型和类之间的差异

来自分类Dev

xvalues:非类类型和类类型之间的差异

来自分类常见问题

类型和类型别名之间的Elm差异?

来自分类Dev

SML模块系统与Haskell的Type and Typeclass系统之间的功能差异是什么?

来自分类Dev

挂载和磁盘工具上文件系统类型的差异

来自分类Dev

插座类型之间的差异

来自分类Dev

演员类型之间的差异

来自分类Dev

插座类型之间的差异

来自分类Dev

Rails html.erb文件类型,<%%>和<%=%>之间的差异

来自分类Dev

等效Java和Kotlin Stream代码之间的意外类型差异

来自分类Dev

类型参数中*(星号)和_(下划线)之间的差异

来自分类Dev

PostgreSQL 9.0和9.1之间的枚举类型文字的顺序差异

来自分类Dev

单例设计模式和不同类型之间的差异?

来自分类Dev

Haskell 类型系统解释?

来自分类Dev

(ML)模块与(Haskell)类型类

来自分类Dev

[]和[]()之间的差异

来自分类Dev

“ +:”和“ ::”之间的Scala差异

来自分类Dev

<%=和<%#之间的差异?

来自分类Dev

[[]]和[]之间的R差异

来自分类Dev

$和()之间的差异

来自分类Dev

\%和%%之间的差异

来自分类Dev

<%和<%=之间的差异

来自分类Dev

$ @和$ *之间的差异

来自分类Dev

使用%% A和%A%之间的差异

来自分类Dev

之间的差异| 和$

来自分类Dev

.eq。之间的差异 和==

来自分类Dev

==,=和eq之间的差异

来自分类Dev

/和/ **之间的差异