PLT 板


LINE

看板 PLT  RSS
哇,高手来了。都是很有意思而且不很容易答的问题哩。 :) ※ 引述《code17 (None)》之铭言: : 1) 好像GADT所解决的问题,以前在ML里一直是用phantom types : 来作的,不知道这个理解对不对。当然GADT显然要干净得多,不需 : 要定义额外的constructor function也不需要module level的 : abstraction。但我想知道这两种技术在表达能力上一样强吗?或 : 是GADT可以表达一些phantom types不能表达的情况? 先确认一下我们说的 phantom type 是什麽。我所知道的第一种 是来自Leijen & Meijer: http://www.usenix.org/events/dsl99/full_papers/leijen/leijen.pdf 之所以叫做 phantom type 是因为右手边有个没出现在左边的 type variable, 如: data Expr a = Expr PrimExpr -- 没有 a data PrimExpr = ... -- 真正的资料结构定义 这个 a 可以存放一些资讯。例如,如果我们只准许用几个定好的 method 来产生 Expr: plus :: Expr Int -> Expr Int -> Expr Int and :: Expr Bool -> Expr Bool -> Expr Bool 我们就可以确保算式的 type 是对的。 这样的 phantom type 似乎在跨模组界限时会出现一些问题,所以 Cheney & Hinze 等人另外提了一种 "First-class phantom type", 大致上的主意是用一些资料结构来确保 type equality (後述)。 在我理解中,first-class phantom type 只要再加上一些语法修饰 就是 GADT 了。 http://www.informatik.uni-bonn.de/~ralf/publications/With.pdf http://ecommons.library.cornell.edu/handle/1813/5614 Cheney & Hinze 谈到用 2nd-rank polymorphism 就可以模拟 GADT. 例如下面这个宣告: data Expr a where ... Num :: Int -> Expr Int 其实可以 encode 成: data Expr a = Num :: (a :=: Int) -> Int -> Expr a 其中 (a :=: Int) 是某个资料结构,强迫 a 会等於 Int. 这种资料结构可以这样做: data a :=: b = Proof (forall a . f a -> f b) 两个 type a 和 b 一样,如果他们在任何 context f 之下都 一样。唯一有这个 type: forall a . f a -> f b 的 term 是 id, 所以 a 和 b 非得是一样的 type 不可。 refl :: a :=: a refl = Proof id 这表示 algebraic data type 再加上 2nd-rank polymorphism 就可以模拟 GADT. : 2) 如果在ML的类型系统里加入GADT,type inference依然是 : determinic的吗? 据我所知并不是的。原因之一是有了 GADT 也该有 polymorphic recursion(例如传回 Bool 的 eval 可能会去 call 传回 Int 的 eval),但 polymorphic recursion 的 type inference (若没有 type annotation)本来就是 undecidable 的。 关於 GADT 的 type inference 可以参考 http://research.microsoft.com/Users/simonpj/papers/gadt/index.htm : 3) 如果不考虑value-dependent types,而只限於type-dependent : types这一范围, 除了GADT还有哪些其他的type arithmetic是可以 : 加到今天的程序语言里的呢? 在这一范围内,表述能力最强的类型系统 : 是怎样的呢? Hmmm... 我只知道在以前用 Haskell 的 type class 也可以做一些 type arithmetic (我玩过一点点,但实在是太辛苦了...). 而既然 type class 可以,用 ML 的 module 应该也是可以的。 是否还有其他的方式,以及他们的 expressiveness 方面我就不是很 清楚了。你知道其他的吗? :) --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.109.20.217
1F:推 godfat:又要看好久|||b 太弱惹 O_Q 12/08 02:21
2F:→ noctem:呴呴.. 如果你看得比我写得还慢你就逊到了呀.. XD 12/08 21:35
3F:推 godfat:好多 ref 耶 XD 而且老实讲乍看不是很懂有时候会懒得想|||b 12/09 19:53







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BabyMother站内搜寻

TOP