将Haskell语言语法应用于代码块(而不是整个模块)

时间:2018-08-14 19:43:47

标签: haskell

在Haskell中是否可以将语言编译指示应用于代码块而不是整个文件本身?

例如,我启用了-fwarn-monomorphism-restriction标志,但是我确实有几个文件要禁用此标志,因此我在文件顶部使用了{-# LANGUAGE NoMonomorphismRestriction #-}

但是,我不想将这个编译指示应用于整个模块,而只是将其应用于我认为此警告无济于事的代码块。我现在想到的唯一解决方案是将这段代码移到其自己的文件中,然后将其导入

1 个答案:

答案 0 :(得分:3)

通常没有办法,没有。

对于此特定的编译指示,可以通过为单个声明赋予类型签名来禁用单态限制。尽管我强烈建议您提供完整的签名,但是在某些情况下,出于某些原因,这是不可取的。在这种情况下,即使是充满漏洞的签名也已足够,例如

{-# LANGUAGE PartialTypeSignatures #-}

x :: _ => _
x = (+)

将被推断为具有类型Num a => a -> a -> a而不是Integer -> Integer -> Integer