相关疑难解决方法(0)

Haskell前monadic I/O.

我想知道在IO monad尚未发明的时代,Haskell中的I/O是如何完成的.任何人都知道一个例子

编辑:现代Haskell中没有IO M​​onad可以完成I/O吗?我更喜欢一个适用于现代GHC的例子.

io monads haskell

49
推荐指数
1
解决办法
4119
查看次数

从功能编程范例中记录

我更倾向于尽可能地接近功能范例,当我的大脑迎接挑战时,尽可能地挤压到纯粹的功能.我尽可能使用F#.通常,我会遇到VB.NET或C#(或VBA,当我真的不走运时).所以我的语言让我偏离了功能方法.

从历史上看,我已经忽略了日志记录并与用户通信,直到我得到结果 - 让用户等待.现在我正在尝试实现状态栏的记录和/或更新.这很容易,因为我的语言允许我随时写入标准输出.但是从一个纯粹的功能角度来看,如何将一个人的功能泄露到外部世界?在计算过程中记录或与用户通信是否与纯功能方法相反?

我敢肯定在Haskell中会使用Monad.使用其他语言时呢?

谢谢.

logging functional-programming purely-functional

21
推荐指数
2
解决办法
5772
查看次数

在Haskell中创建唯一标签

我正在为Haskell中的简单命令式语言编写编译器,输出Java字节码.我已经到了我发出字节码的抽象表示的地步.

在编写用于编译if语句的代码时遇到了一些麻烦.要实现if语句,我需要跳转到标签.因此,我需要为该标签生成一个名称,该名称必须是唯一的.

我的第一个想法是通过一些状态compileStatement,即

compileStatement :: Statement -> UniqueIDState -> [AbstractInstruction]
Run Code Online (Sandbox Code Playgroud)

当然,compilerStatement是递归的,所以使用这种方法需要我从递归调用中将唯一ID生成器的状态传递回upp:

compileStatement :: Statement -> UniqueIDState -> (UniqueIdState, [AbstractInstruction])
Run Code Online (Sandbox Code Playgroud)

这看起来有点笨拙,特别是如果我意识到我需要在将来携带更多状态; 有更优雅的方式吗?

compiler-construction haskell code-generation

6
推荐指数
2
解决办法
1658
查看次数