haskell - 使用 GHC Haskell 进行编译时断言?

标签 haskell ghc compile-time

来自 C++,我习惯于构建简单形式的编译时断言,如果通过使用模板元不满足某些简单条件(例如,通过简单代数表达式),我可以在编译期间发出警告或错误-编程和/或cpp(1)
例如,如果我想确保我的程序仅在 Int 时编译。至少有一定的minBound/maxBound范围,或者,如果从 Int64 进行无损失(如可逆)转换至Int可以使用当前的编译目标。这可以通过一些 GHC Haskell 扩展来实现吗?我的第一个猜测是使用 TH。是否有其他 GHC 设施可用于此目的?

最佳答案

这里是 Anthony's example 的通用和稍微简化的版本:

{-# LANGUAGE TemplateHaskell #-}
module StaticAssert (staticAssert) where

import Control.Monad (unless)
import Language.Haskell.TH (report)

staticAssert cond mesg = do
    unless cond $ report True $ "Compile time assertion failed: " ++ mesg
    return [] -- No need to make a dummy declaration

用法:
{-# LANGUAGE TemplateHaskell #-}
import StaticAssert

$(staticAssert False "Not enough waffles")

关于haskell - 使用 GHC Haskell 进行编译时断言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6648764/

相关文章:

haskell - 重启时XMonad确认

haskell - 使用 ghcjs 将 Haskell 模块编译为 Javascript

haskell - 如何在提示中强制解释

swift - 编译时检查 Swift 中除以 0

haskell - ghc-mod:更新后, `cannot satisfy -package-id base-4.8.2.0`

arrays - 单精度数组的 deepSeqArray

haskell - 为什么 GHC 不能为 Monoid 派生实例?

haskell - 代表性双仿函数的不动点

Java8 对具有数千个同名默认方法的接口(interface)进行缓慢编译

c++ - 如何在编译时检查类型是否为多态