首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将IO Monad对我的代码的影响降至最低的公认方法是什么(如果有

将IO Monad对我的代码的影响降至最低的公认方法是什么(如果有
EN

Stack Overflow用户
提问于 2020-07-10 22:06:59
回答 1查看 139关注 0票数 4

我对IO Monad有点纠结。(仍然只是一个101级的学习者)

我相信我理解将"IO“从纯功能代码中分离出来的绝佳理由,但这似乎使我的代码在使用时钟和环境属性时变得更加复杂。下面是一个例子(与时钟相关):

代码语言:javascript
复制
timeZoneSeconds = liftA (60*) $ liftA timeZoneMinutes getCurrentTimeZone

现在,我有很多关于timeZoneSeconds的其他事情要做--加、减、比较--在程序的其他地方,当timeZoneSeconds与其他位交互时,我处理的几乎所有事情都会变成一个"IO ",从而用timeZoneSeconds填充我的代码。

所以基本上我看到我所有的纯代码都变成了IO脏代码。

在我看到的所有说教材料中,围绕IO monad的大多数解释都是“先读东西再写东西”,没有太多的“计算材料”。

有没有推荐的方法来最小化这种影响?

我是否应该重新定义“在幕后”使用liftA所需的所有运算符?

或者我应该继续做下去?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-11 00:30:12

可以把它看作是依赖注入。您将不纯调用的结果注入到纯代码中,然后使用纯代码的结果执行更多的不纯IO,例如打印结果:

代码语言:javascript
复制
main = do
  env <- lookupEnv "ENV"
  tz <- getCurrentTimeZone
  let result = pureCode env tz
  putStr result

您的pureCode函数没有附加任何IO

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62836068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档