我有一個模塊其中通過調用初始化函數創建並初始化全局環境(定義某些約束,如鄰居IP地址等)。一些後續函數在調用時應該使用這些約束。全局變量和閱讀器monad
雖然原則上我明白讀者monad的作用,但我不太清楚如何將其應用於我的問題,尤其是我的問題。
它如何用來初始化由用戶定義的環境,並將其作爲數據/參數傳遞給初始化函數。我的意思是,讀者monad必須從某個地方獲得組成全球不變環境的實際值。我想,該值是從初始化函數調用,比如
myinitial :: arg1 -> arg1 -> IOString
哪裏隨後arg1
和arg2
成爲全球通過讀者單子讀給後續函數訪問變量數據(?)如何使用這些環境的值作爲函數的參數例如
recvFrom s arg1
其中arg1
是來自我的環境的全球不可變數據。或if arg2 > arg1 then ... else ...
我可以做當然是一個配置文件,但我覺得一個配置文件會帶走得多的靈活性。
[編輯]我瞭解問題,但不應該有額外的「無點狀」方式,以便全局/環境不可變可以省略,如果函數簽名已被定義正確嗎?我將如何重構我的if-then-else以應用this。
部分工作,如問題中提到的我有一個**模塊**,它具有許多功能;其中有一個創建環境的初始化函數。來自稍後調用的模塊的函數應該使用該環境。這對讀者monad來說可能嗎? –
但是這個工作應該如何?在你的/我的例子中,初始化函數會說'let config = Config blabla',後續函數需要'let result = runReader example config'; - 但是後面的函數不知道'config'。 –
查看[這個要點](https://gist.github.com/2924160),其中包含一個簡單的例子。在模塊1中,我們定義了一個初始化全局環境的函數和一些依賴於全局環境的函數。模塊2只包含一個初始化環境的主函數,並使用'runReader'調用依賴它的函數(**編輯:**道歉,我刪除了您回覆的原始註釋並用此代替它。) –