首页 > 解决方案 > 这个 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 实例添加额外的参数。我是否错过了某种从论文中获取原始代码进行编译的方法?

标签: haskell

解决方案


你需要告诉编译器期望affordance类中的参数QUALITIESandAFFORDANCES是一个类型构造函数——换句话说,有 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    

推荐阅读