首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Haskell递归/循环模块定义?

Haskell递归/循环模块定义?
EN

Stack Overflow用户
提问于 2011-12-28 07:25:57
回答 2查看 3.6K关注 0票数 19

我有两个互相导入的模块。Haskell不支持递归模块。那么,我如何在不需要循环模块系统的情况下重写我的数据类型。

这是我的Character.hs

代码语言:javascript
复制
module Character where
import ItemSystem

data Character = Character { name :: String, items :: [Item] }

这里是ItemSystem.hs

代码语言:javascript
复制
module Item where
import Character

data ItemEffect = CharacterEffect (Character -> Character)
                | ItemEffect      (Item -> Item)

data Item = Item { name :: String, weight :: Int, effect :: ItemEffect }

更新:我将把我的所有数据类型写到一个模块中:(。

EN

回答 2

Stack Overflow用户

发布于 2011-12-28 08:06:59

选项1:按照hammar的建议,将相互依赖的部分放入各自的模块中。

选项2:将所有内容放入同一个模块中。

选项3:如果您正在使用GHC,可以为其中一个模块创建一个hs-boot文件,并让另一个模块使用{-# SOURCE #-}杂注导入该文件。

票数 5
EN

Stack Overflow用户

发布于 2021-08-17 14:17:52

您还可以使用参数...Character不是Items的固定类型wrt,而是一个参数类型。

代码语言:javascript
复制
module Character where

data BaseCharacter itemType = Character { name :: String, items :: [itemType] }

ItemSystem.hs就变成了

代码语言:javascript
复制
module Item where
import Character

type Character = BaseCharacter Item
data ItemEffect = CharacterEffect (Character -> Character)
                | ItemEffect      (Item -> Item)

data Item = Item { name :: String, weight :: Int, effect :: ItemEffect }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8650297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档