【问题标题】:Apply Haskell Language Pragma to Block of Code (rather than entire module)将 Haskell Language Pragma 应用于代码块(而不是整个模块)
【发布时间】:2018-08-14 19:43:47
【问题描述】:

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

例如,我启用了-fwarn-monomorphism-restriction 标志,但我有几个文件我真的想禁用此标志,所以我在文件顶部使用{-# LANGUAGE NoMonomorphismRestriction #-}

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

【问题讨论】:

  • 为什么不将该块移动到单独的文件中?
  • Tbh,这很愚蠢,它只是一个非常小的函数,我犹豫要为其创建一个完整的文件/模块。我知道这不是一个很好的理由,但这也只是激发了我对它的总体好奇心,所以我想问问是否有可能。

标签: haskell


【解决方案1】:

一般来说没有办法做到这一点,不。

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

{-# LANGUAGE PartialTypeSignatures #-}

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

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

【讨论】:

    猜你喜欢
    • 2020-05-13
    • 2016-06-21
    • 1970-01-01
    • 2020-01-23
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 2011-08-27
    • 2018-04-27
    相关资源
    最近更新 更多