haskell - 这个 Haskell 代码可以按书面形式编译吗?
问题描述
我正在尝试从论文中编译一些 Haskell 代码。论文中的相关文字描述和列表如下。
文字说明
“我们将 AFFORDANCES 作为 QUALITIES 的子类引入,并将 Climbability 建模为一种继承在 Step 中的 AFFORDANCES。QUALITIES 的构造函数需要始终与其宿主定义可攀爬性等质量。AFFORDANCES 和 Climbability 的实现如清单所示1. .... 清单 1 中指定的类 AFFORDANCES 提供了如何在 Haskell 中编写可供性的规范。Climbability 实现了这个规范。 ”
清单 1
class (QUALITIES affordance physicalEndurant, PHYSICAL_ENDURANTS physicalEndurant) => AFFORDANCES affordance physicalEndurant
data PHYSICAL_OBJECTS step => Climbability step = Climbability step
instance QUALITIES Climbability Step
instance AFFORDANCES Climbability Step
就目前而言,清单 1缺少一些定义,我已将其添加到清单 2中的代码中。
清单 2
{-# LANGUAGE MultiParamTypeClasses, DatatypeContexts,FlexibleInstances #-}
data Step = Step
class PHYSICAL_ENDURANTS physicalEndurant where
class PHYSICAL_OBJECTS physicalEndurant where
class QUALITIES affordance physicalEndurant where
instance PHYSICAL_ENDURANTS (Climbability Step) where
instance PHYSICAL_ENDURANTS Step where
class (QUALITIES affordance physicalEndurant,PHYSICAL_ENDURANTS physicalEndurant) => AFFORDANCES affordance physicalEndurant
data PHYSICAL_OBJECTS step => Climbability step = Climbability step
-- extra arguments
instance QUALITIES (Climbability Step) Step
instance AFFORDANCES (Climbability Step) Step
但是为了编译清单 2,我必须修改清单 1,向 QUALITIES 和 AFFORDANCES 实例添加额外的参数。我是否错过了某种从论文中获取原始代码进行编译的方法?
解决方案
你需要告诉编译器期望affordance
类中的参数QUALITIES
andAFFORDANCES
是一个类型构造函数——换句话说,有 kind* -> *
和 not *
。
如果你添加{-# LANGUAGE KindSignatures #-}
到你的扩展,你可以QUALITIES
用那种签名进行注释,其余的将遵循:
{-# LANGUAGE MultiParamTypeClasses, DatatypeContexts, FlexibleInstances, KindSignatures #-}
data Step = Step
class PHYSICAL_ENDURANTS physicalEndurant where
class PHYSICAL_OBJECTS physicalEndurant where
class QUALITIES (affordance :: * -> *) physicalEndurant where
instance PHYSICAL_ENDURANTS Step where
class ( QUALITIES affordance physicalEndurant
, PHYSICAL_ENDURANTS physicalEndurant
) => AFFORDANCES affordance physicalEndurant
data PHYSICAL_OBJECTS step => Climbability step = Climbability step
instance QUALITIES Climbability Step
instance AFFORDANCES Climbability Step
推荐阅读
- arrays - 在 GO 中获取嵌套的 JSON 结构数组
- javascript - 将 HTML 数据属性设置为整数数组
- java - 如何使用工具栏项从 Fragment 导航到 Fragment (Java/Android Studio)
- swift - 如何将 tabview 添加到现有的基于 XIB 的单窗口 APP 以显示多个选项卡?
- java - java.lang.IllegalStateException:ComponentAccessor 尚未初始化
- python-3.x - 如何从 python 获取 BQL (bLOOMBERG) 查询
- reactjs - 如何在 eslint 中忽略所有没有扩展名的文件
- python - Instagram 使用 python 请求登录,cookie 错误
- vuejs3 - vue 3 data() not workink setup() 工作但为什么?
- android - Navigation Drawer 和 ActionBar Android?