English 中文(简体)
是否可贵?
原标题:Haskell: -fglasgow-exts should one avoid code that requires this?
  • 时间:2009-08-25 19:23:03
  •  标签:

我先是Haskell。

Illegal parallel list comprehension: use -fglasgow-exts

我是在<代码>ghci和ghc内工作的,但仅因为这是我在搜索中发现的第一个。

如果这是人们想要避免前进的那种情况,我很奇怪。 我提到,任何搜查都提到,这些延伸暴露了可能(或可能不会)有用的基本设施。

具体实例

fibs = 0 : 1 : [ a + b | a <- fibs | b <- tail fibs ]

我假定,<代码>a和b正在从名单上读到,同时造成问题......? 因此,如果冰川延伸是支持这一建筑的唯一手段,那么以另一种方式或仅仅假定可以延长该名单就更加常见?

预先感谢任何投入。

[EDIT] Sorry if this was not entirely clear, but my question is if including glasgow (or any other) extensions is considered bad practice. The example above was just to illustrate the type of error that prompted this question.

最佳回答

而不是要求all GHC 延伸,具体说明使用<代码>的延伸 LANGUAGE pragma mechanism:

{-# 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,通常在用户制作的图书馆使用。 其他一些例子,如模板或不一致的情况,除非你really<>/em>知道你重新做些什么,否则很可能不是一个好的想法。

问题回答

GHC无疑是普遍的——我认为它是最常用的Haskell汇编者,因此它可能陷入太麻烦。 你们应始终努力起草符合标准的守则,但可能不是针对个人项目,而是针对最低业务安全标准或工作项目。

任何事情都会发生,是正确的? 因此,通过你的项目,汇编者半途突然发生变化。

不同的人使用不同的汇编器,例如,人权总会也非常常见。

Using extensions is fine. Flag them specifically with -XFoo or LANGUAGE FOO. Which extensions you choose to use are up to you, you might want to stick to those listed for inclusion in Haskell Prime.

我建议使用“<代码>,,而不是“>,但我得知,这是我所期望的。

因此,除了可携性外,你还应考虑可读性。 采用不寻常的延伸,可能会使你的法典更加难以阅读(对于那些不熟悉延长期限的人来说)。

一些延伸对可读性没有任何负面影响(由此形成的代码是显而易见的),例如,FlexibleContexts,FlexibleInstances

其他人则要求读者熟悉新的辛迪加,了解这一辛迪加的含义。 这方面的例子有<编码>ParallelListComp,TypeFamilies,。 在这种情况下,我建议设法避免延长这些期限,除非它们带来好处。 在这种情况下,正如John Millikin所建议的那样,你只能使用<代码>zip,或者按照不知名的建议重新制定该守则。

+1 不建议使用计划列入

Haskell 2010将于2009年底获释。 将在2009年9月3日Haskell专题讨论会上宣布将要纳入的一套变化。





相关问题
热门标签