如何在自己创建的数据类型中存储一些值。存储后,不同的模块应该可以访问这些值。
如果你能告诉我一些代码示例,那会很好,因为我在Haskell中很新
到目前为止我的代码: 第二个模块(没有主要内容)
data SimuInfo = Information {
massSaved:: Double
} deriving Show
initialization:: Double-> SimuInfo
initialization m = Information{
massSaved = m
}
--a example function, which uses the data
example:: Double -> SimuInfo -> Double
example a information = 2* a * b
where
b = massSaved information
这是第一个模块中的代码,它使用数据类型:
import Simufunc -- the import of the 2nd module
example2 :: Double -> Double
example2 a = example a Information
这是我收到的以下错误消息:
Couldn't match expected type ‘SimuInfo’
with actual type ‘Double -> SimuInfo’
Probable cause: ‘Information’ is applied to too few arguments
In the second argument of ‘example’, namely ‘Information’
In the expression: example a Information
提前致谢
答案 0 :(得分:1)
错误消息通知您example2
无效,因为您传递给example
的第二个参数应该是Double
,但您传递的是函数
example2 a = example a Information
Information
是一个构造函数,这意味着它也是一个以Double
作为参数并返回SimuInfo
值的函数。
你有initialization
函数与Information
构造函数做同样的事情:它是一个函数,它将Double
作为参数并返回SimuInfo
值
因此,您需要更新example2
以将缺少Double
的{{1}}添加为Information
的输入。以下是通过向example2
添加另一个参数来实现此目的的示例:
example2 :: Double -> Double -> Double
example2 a infoVal = example a (Information infoVal)
上述内容也可以使用您的帮助函数initialization
example2 :: Double -> Double -> Double
example2 a infoVal = example a (initialization infoVal)
如果您想拥有"默认"您可以从任何地方访问SimuInfo
的值(类似于其他语言中的常量),您可以这样声明:
zeroedInformation :: SimuInfo
zeroedInformation = Information 0