gpt4 book ai didi

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

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

来自 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/

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