gpt4 book ai didi

Haskell:-fglasgow-exts 应该避免需要这样做的代码吗?

转载 作者:行者123 更新时间:2023-12-04 09:04:46 26 4
gpt4 key购买 nike

我是 Haskell 的初学者,我开始看到类似于以下内容的错误:

Illegal parallel list comprehension: use -fglasgow-exts

我在 ghci 内工作和 ghc但只是因为它是我在搜索中找到的第一个。

我很好奇这是否是人们想要避免前进的那种情况。我发现的任何搜索都提到这些扩展暴露了可能(或可能没有)有用的基础设施。

一个具体的例子是
fibs = 0 : 1 : [ a + b | a <- fibs | b <- tail fibs ]

我假设两个 ab同时从列表中读取会导致这里出现问题...?那么,如果 glasgow 扩展是支持此构造的唯一方法,那么更常见的是以另一种方式生成列表还是假设扩展可用?

提前感谢您的任何意见。

[编辑]
抱歉,如果这不完全清楚,但我的问题是是否包含 glasgow(或任何其他)扩展被认为是不好的做法。上面的例子只是为了说明提示这个问题的错误类型。

最佳答案

不要请求所有 GHC 扩展,而是使用 LANGUAGE 指定使用哪些扩展。语用机制:

{-# LANGUAGE ParallelListComp #-}
xy = [ x+y | x <- [1, 2, 3, 4] | y <- [5, 6, 7, 8] ]

I assume the fact that both a and b are reading from the list at the same time causes problems here...? So, if the glasgow extensions are the only means to support this construct is it more common to generate the list another way or just assume that the extensions will be available?



允许对同一列表进行并行迭代。问题是 Haskell 98 标准中没有定义并行推导。可以使用 zip 轻松模拟它们:
xy = [x+y | (x,y) <- zip [1, 2, 3, 4] [5, 6, 7, 8]]

扩展本身也不错——许多标准库都使用了某种扩展。许多人正在考虑纳入 Haskell' ,Haskell 标准的下一次迭代。一些扩展,例如 GADT,通常在用户编写的库中使用。其他的,例如模板或不连贯的实例,可能不是一个好主意,除非你真的知道你在做什么。

HaskellExtensions wiki page 中列出的任何扩展名在两个或更多编译器的支持下使用可能是安全的。

关于Haskell:-fglasgow-exts 应该避免需要这样做的代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1330400/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com