所以我开始围绕Monads(在Haskell中使用).我很好奇IO或状态可以用纯函数语言处理的其他方式(理论上或现实中).例如,有一种名为"mercury"的逻辑语言使用"效果打字".在诸如haskell之类的程序中,效果打字工作会如何?其他系统如何运作?
Haskell中的monadic IO构造只是一个约定,还是有一个实现原因呢?
你能不能只用FFI进入libc.so而不是你的IO,并跳过IO Monad组件?
无论如何它会起作用,或者结果是不确定的,因为Haskell评估懒惰或其他东西,比如GHC是IO Monad的模式匹配,然后以特殊方式或其他方式处理它.
真正的原因是什么?最后你最终会产生副作用.那么为什么不这么简单呢?
我一直试图将功能编程包围一段时间?我已经查找了lambda演算,LISP,OCML,F#甚至组合逻辑,但我遇到的主要问题是你如何做需要副作用的事情(与用户交互,与远程服务通信,甚至处理模拟使用)随机抽样)不违反纯函数式编程的基本前提,即对于给定的输入,输出是确定性的?我希望我有意义,如果不是,我欢迎任何正确教育我的尝试.提前致谢.
所有monad文章经常陈述,monad允许你按顺序排列效果.
但是简单的构图怎么样?是不是
f x = x + 1
g x = x * 2
result = f g x
Run Code Online (Sandbox Code Playgroud)
需要g x先计算f ...?
单子会做同样的事情,但处理效果?
我对IO Monad没有任何问题.但我想了解以下内容:
(IO String)是一个动作(当执行时)它可以返回一个String类型的值.这很好,但是这个执行发生的人/地点.当然!计算机正在执行此操作.这也没关系.但由于我只是一个初学者,我希望你原谅我问,这个"执行"的配方在哪里.我猜它不是用Haskell编写的.这个后来的想法是否意味着,毕竟Haskell程序被转换为类似C的程序,最终将转换为程序集 - >机器代码?如果是这样,哪里可以找到Haskell中IO内容的实现?非常感谢