【发布时间】:2010-08-10 17:11:37
【问题描述】:
我是haskell的新手,我必须编写一个上下文感知程序,所以我想我可以使用Reader Monad来保持从文件中读取的上下文,我知道如何读取文件并将内容放入列表中tuplesssomething like [([Char],[Char])],但我不知道如何实现 Reader Monad,以便在不使用命令式样式的情况下使程序的所有组件都可以使用该环境,特别是我不知道如何设置和使用环境,据我了解,我应该将它作为参数提供给所有需要使用 runReader 函数 env 的环境的函数,但我很困惑,有人可以给我一些指示或好的教程吗?提前致谢
【问题讨论】:
-
您确定首先需要
Reader吗? “使环境对所有组件可用”通常不是在 Haskell 中编写代码的最佳方式。你能更详细地描述你正在从事的任务吗? -
@Travis Brown:如果您有大量本质上是静态的数据,在整个程序的许多地方都需要按原样使用,并且仅在运行时可用,例如通过加载数据,这可能是有意义的文件。例如,想象一个程序,其中所有文本都本地化并在程序启动时从资源文件加载。
-
事实上,如果我觉得有什么可疑之处,那就是
[([Char], [Char])]类型。知道它是一个环境,它听起来有点像一个字符串字典,它应该至少是一个Data.Map.Map String String,如果不是更迷人的东西,比如可爱的bytestring trie。 -
回答 Travis:我正在使用缓存服务器,它根据上下文以不同的方式运行,在我的情况下,上下文是一个 file.txt,可以在服务器工作时修改.阅读了一些关于 reader monad 和 writer monad 的内容后,我认为 reader monad 可以很好地管理环境,而 writer monad 可以用于缓存,但我不确定,因此我向论坛咨询,现在我将检查什么是字节串-trie