【发布时间】:2018-07-02 06:46:59
【问题描述】:
你好,我想知道你如何解决 Haskell 中的循环依赖
我有:
类型的模块。
module Company where
import Tclass
data Worker=Worker{
age::Int,
name::String,
title::Title,
income::Int
}
data Title=Manager | Dev | Tester deriving (Show)
data Company=Company{
cname::String,
people::[Worker],
yf::Int
}
类型类实例的模块
module Tclass where
import System.Environment
import Company
class Console a where
wLine::a->IO()
rLine::IO String->a
instance Show Worker where
show w="to be defined"
print =putStr . show
如果我只想在 ghci 中加载类型并使用它;我如何导入它们而不出现错误:
Module imports form a cycle:
module `Tclass' (.\Tclass.hs)
imports `Company' (Company.hs)
which imports `Tclass' (.\Tclass.hs)
P.S我已经尝试创建一个辅助模块来导入这两个模块并且这两个模块也会导入它,但是这个也没有运气:
module Au where
import Tclass
import Company
module Company
import Au
module Tclass
import Au
【问题讨论】:
-
第一个模块好像不应该导入第二个,你能把
import Tclass删掉重试吗? -
但如果我不导入
Company模块内的TClass,我就不能使用Show的实例来表示Worker类型。 -
那你能把 Show 实例移到另一个模块吗?在另一个模块中定义实例而不是数据定义是不好的做法(您将收到孤立实例警告)
-
您可以在特定模块中拥有类型,但要使用它们的实例。
-
这不是问题的一部分,但阅读您的代码我建议您阅读数据记录中的严格字段:stackoverflow.com/questions/8576795/… 这可能会有所帮助。
标签: haskell