2016-08-31 51 views
-1

如何將一些值存儲在自己創建的數據類型中。存儲後,不同的模塊應該可以訪問這個值。通過不同模塊傳遞信息Haskell

這將是很好,如果你能告訴我一些代碼示例,因爲我在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

請限制Stack O verflow問題集中在單個問題上。你關於鍵盤輸入的問題應該轉移到它自己的問題上,或者[在這裏閱讀輸入/輸出](http://learnyouahaskell.com/input-and-output) –

回答

1

該錯誤消息通知您example2無效,因爲你傳遞到example第二個參數應該是是一個Double,但你是在傳遞一個函數。

example2 a = example a Information 

Information是一個構造,這意味着它也是需要Double作爲參數,並返回一個SimuInfo值的函數。

你有一個initialization功能,做同樣的事情作爲Information構造函數:它是一個函數,它接受一個Double作爲參數和返回值SimuInfo

因此,您需要更新example2才能將缺少的Double作爲輸入添加到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