PLT 板


LINE

看板 PLT  RSS
最近这里好像比较热闹,希望有大大能看到我的问题 orz 废话有点多,如果想直接看问题的话请直接拉到最下面 假设有一个 Id : String → Set,用来表示 Minecraft 中的各种不同物品 data Id : String → Set where  id : (rawId : String) → Id rawId 对於一种物品我们须要知道的事只有三个,名字、物品栏中的可堆叠数量、是否能在创造 模式物品栏中直接获得 record Item {rawId : String} (_ : Id rawId) : Set where  field   displayName : Id rawId → String   stacks : Id rawId → Fin 65   obtainable : Bool 开始新增物品种类到 Minecraft 世界中 instance 用 "minecraft:stone" 建立的 Id 当作石头的 ID,石头可以堆叠 64 个,可从创造模式 物品栏直接活获得  Stone : Item (id "minecraft:stone")  Stone =   record {    displayName = "Stone";    stacks = # 64;    obtainable = true   } 盔甲座 ID 是 "minecraft:armor_stand",可堆叠 16 个,可以从创造模式物品栏直接获 得  ArmorStand : Item (Id "minecraft:armor_stand")  ArmorStand =   record {    displayName = "Armor Stand";    stacks = # 16;    obtainable = true   } -- Normal form 是 "Stone" stoneDisplayName : String stoneDisplayName = displayName (Id "minecraft:stone") -- Normal form 是 "Armor Stand" armorStandDisplayName : String armorStandDisplayName = displayName (Id "minecraft:armor_stand") 以上程式都还没有问题,我想问的是下面这个 itemDisplayName : String → String itemDisplayName rawId = displayName (Id rawId) 会报错,因为不是所有 rawId 都有一个 Item 的 instance 我想问的是,在 Agda 里要怎麽保证所有用来呼叫 itemDisplayName 的 String 都有一 个 Item 的 instance? (is it even possible? what should I be searching for?) 例如有什麽办法可以弄到一个 proof 之类的,然後编译器就不会报错了吗? 谢谢! (目前想到的方法就只有枚举所有 instance 来 pattern matching,但显然在 instance 数量很多的情况下不是什麽好方法) --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 174.112.166.163 (加拿大)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/PLT/M.1587876727.A.FB6.html ※ 编辑: CoNsTaR (174.112.166.163 加拿大), 04/27/2020 16:22:39
1F:推 stopcrying: 来发正念召唤看看 banacorn 或 petercommand ...04/27 20:56
2F:→ stopcrying: petercommand 说 https://bit.ly/2xc9qDc04/27 22:35
3F:→ stopcrying: ptrcmd> 就..直接把 instance 传进去阿..XD04/27 22:36
4F:→ CoNsTaR: 感谢回答! 抱歉没讲清楚,rawId 有可能是 runtime 的输04/27 23:43
5F:→ CoNsTaR: 入04/27 23:43
6F:→ CoNsTaR: 如果把 itemDisplayName 的 type 改成 String -> Maybe S04/27 23:43
7F:→ CoNsTaR: tring 的话有解吗 @@04/27 23:43
8F:→ CoNsTaR: 主要就是希望保留 instance resolution,而且须要某种方 04/27 23:49
9F:→ CoNsTaR: 法在 runtime 知道 resolution 成功与否(虽然说 resolut04/27 23:49
10F:→ CoNsTaR: ion 是在 compile time orz...)04/27 23:49
11F:→ CoNsTaR: 是不是须要 reflection 啊04/27 23:50
12F:→ suhorng: 不知道为什麽想到 type provider. 没有很懂问题描述XD 05/28 11:35
如果是 idris 的话应该可以用 type provider 编译期搜寻所有 Item 的 instance,然 後把搜寻的结果拿去 impl Enum? 我觉得我想要的东西有点像 Idris 的 named implementation,而且要有可以在 runtime 选择 implementation 的方法 应该可以说是会自动建 impl list 的 ad-hoc polymorphism,每实作一个新的 impl 就 像是往那个 list 里加东西一样(如果没用到 compile time 可以 erase 掉) 我的想法是 type class 其实就是 ad-hoc 的 sum type,所以 type class 有一个 impl list 就好像 sum type 可以 derive Enum 一样 回得有点晚,抱歉... ※ 编辑: CoNsTaR (174.112.166.163 加拿大), 08/13/2020 15:06:46
13F:推 xcycl: Agda 的 reflection 只有在 type-checking 阶段发生 09/05 10:34







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

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

TOP