我有一个模块,其中通过调用初始化函数来创建和初始化全局环境(定义某些约束,例如邻居 IP 地址等)。许多后续函数在调用时应使用这些约束。
虽然原则上我了解 reader monad 的作用,但我不太确定如何将其应用于我的问题,尤其是。
如何使用它来初始化由用户定义并作为数据/参数传递给初始化函数的环境。我的意思是,阅读器 monad 必须从某个地方获取构成全局不可变环境的实际值。我希望这些值是从初始化函数调用中读取的,例如
myinitial :: arg1 -> arg1 -> IOString
where 随后arg1
成为arg2
全局不可变数据,后续函数可以通过 reader monad(?)我如何将这些环境值用作函数参数,例如我的环境
recvFrom s arg1
中arg1
的全局不可变数据在哪里。或者if arg2 > arg1 then ... else ...
我当然可以制作配置文件,但我觉得配置文件会带来很大的灵活性。
[编辑]我理解询问,但是如果函数签名已正确定义,是否应该有额外的“类似pointfree”的方式以便可以省略全局/环境不可变?我将如何需要重构我的 if-then-else 来应用this。