小编use*_*465的帖子

哈斯克尔的IORef

我想知道Haskell中的IORef是否合法使用?更具体地说,如果有人能够解决以下问题或指向适当的地方了解更多信息,我将感激不尽:

  1. 使用IORef被认为是一个糟糕的Haskell实践吗?如果是,为什么?更具体地说,它比IO monad更好还是更差?
  2. 如果有人想要在程序中添加状态,那么状态monad不是更好(更纯粹)的方式.如果一个人感觉更加迫切,他还不能继续使用STM和MVar,还能更好吗?

  3. 是否有使用IORef而不是STM,MVar或纯IO轻松处理的编程方案?

我正在阅读一篇使用IORef作为代码片段的论文,由于我对IORef的负面看法,我很难读到这篇论文.我不想沉迷于我的无知,而是想让我的同伴Haskellers寻求帮助可能是一个更好的主意.

monads haskell ioref

6
推荐指数
1
解决办法
558
查看次数

在Cabal(Haskell)中连接构建工具

我试图使用bnfc工具为我生成一堆文件,如词法分析器,解析器等.这很好用.现在我想通过不必手动编译bnfc文件并让它生成一些混乱我的/src文件夹的文件来清理它.

我尝试了Cabal机制,您可以在build-tools.cabal文件的字段中列出该工具,并提及您希望按extra-source-files字段生成的文件.这对我来说对Alex和Happy来说bnfc很有用,因为他们被Cabal认为是构建工具,但事实并非如此.有没有办法可以bnfc与Cabal 挂钩或使用任何工具,并让Cabal将它们识别为构建工具?

compiler-construction haskell build cabal bnfc

5
推荐指数
1
解决办法
204
查看次数

在语义分析阶段获取行号信息(使用Alex,Happy)

我正在为实验语言进行语义分析.我正在使用Alex和Happy来生成词法分析器和解析器(实际上我正在使用BNFC工具来生成Alex和Happy文件).每当出现语义错误(比如类型错误)时,我都想收到包含行号和列号的错误消息.

似乎我必须在构建符号表或AST时存储行号信息.如果我可以以某种方式访问​​Happy文件的规则部分中的位置信息,那么我的问题就会解决.

任何有关这方面的建议都将受到高度赞赏.

我尝试实现下面建议的答案,但遗憾的是没有取得任何成功.让我们考虑一个非常简单的语法: -

Expr -> Expr + Term
       | Term
Term -> Int
Run Code Online (Sandbox Code Playgroud)

我的词法分析器如下所示.

%wrapper "posn"

$digit = 0-9            -- digits
$alpha = [a-zA-Z]       -- alphabetic characters

tokens :-

  $white+               ;
  "--".*                ;
  $digit+               { \p s -> L {getPos = p , unPos = Tok_Int (read s) }}
  \+                    { \p s -> L {getPos = p , unPos = Tok_Plus} }


{
data L a = L{ getPos :: AlexPosn, unPos :: a } deriving (Eq,Show) …
Run Code Online (Sandbox Code Playgroud)

compiler-construction haskell alex happy

4
推荐指数
1
解决办法
672
查看次数

标签 统计

haskell ×3

compiler-construction ×2

alex ×1

bnfc ×1

build ×1

cabal ×1

happy ×1

ioref ×1

monads ×1