PLT 板


LINE

看板 PLT  RSS
板主要我回我只好回了... XD ※ 引述《command (ITRS)》之铭言: : 所以说GADT在Haskell上面给我们一种方式去定义generic type可以包含其他的type? 很操作性地举例,在 Haskell 中当我们宣告这样一个 datatype: data Foo a = Bar1 a | Bar2 Int Int 我们得到这两个 constructors: Bar1 :: a -> Foo a Bar2 :: Int -> Int -> Foo a Generalized algebraic datatype (GADT) 中的那个 "generalized" 指 的是 constructor 的结果可以是 Foo a 的 instances, 比如: data Foo a where Bar1 :: a -> Foo () Bar2 :: Int -> Int -> Foo Int 这个参数 a 有许多用途,大致上说来都是让 compiler 有多一些 资讯可用。比如你举的例子,让 parser 表达结果的 type. 在 Haskell 圈更常见的例子是定义一个表达算式的 datatype, 另外 用一个参数注明它 eval 後的型别: data Expr a where Num :: Int -> Expr Int Plus :: Expr Int -> Expr Int -> Expr Int T :: Expr Bool ... 这样一来我们可以确定不准有 Plus T (Num 3) 这样的式子。 GADT 在 dependent type 圈子中出现得更早。 Haskell 有它是 较晚近的事情。 : 看到一个写法, 不知道这样算不算是dependent type的一种应用XD 其实不太算哩。通常 dependent type 指的是 type 可以 dependent on value, 但在上例中 Expr a 的那个 a 仍必须是 type (Int, Bool...) 不能是 value (5, False ...). : 利用type让head function不用检查是不是nil : data Empty : data NonEmpty : data List x y where : Nil :: List a Empty : Cons:: a -> List a b -> List a NonEmpty : safeHead:: List x NonEmpty -> x : safeHead (Cons a b) = a 嗯,这也是一个好例子。事实上若在一个有 dependent type 的 语言里面,你可以进一步用那个参数表达该 list 的长度: data List a n where Nil :: List a 0 Cons :: a -> List a n -> List a (1+n) 可是在 Haskell 里面是不能这麽做的。一个模拟的方式是在 type 的层次上定义 0 和 1+. 把 type 和 value 混一起到底好不好,则是目前仍没有定论的。 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 137.132.201.238
1F:推 godfat:说得像霸权一样... XD 过几天再细看|||b 11/30 02:56
2F:推 command:感谢阿~~ 12/05 04:05







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灯, 水草

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

TOP