haskell - GHC 明确强制要求

标签 haskell ghc

语言扩展 ExplicitForall 使得使用 forall 绑定(bind)类型变量成为可能但不是必需的。

例如,下面的程序可以编译

{-# LANGUAGE ExplicitForAll #-}

-- cps1.hs

-- non-cps definition of add
add :: Int -> Int -> Int
add x y = x + y

-- cps definition of add
add_cps :: forall r . Int -> Int -> (Int -> r) -> r
add_cps x y k = k (add x y)

但是,以下没有显式 r 量词的程序也可以编译。

{-# LANGUAGE ExplicitForAll #-}

-- cps2.hs

-- non-cps definition of add
add :: Int -> Int -> Int
add x y = x + y

-- cps definition of add
add_cps :: Int -> Int -> (Int -> r) -> r
add_cps x y k = k (add x y)

是否有某种语言扩展或编译器标志的组合可以使第二个程序无法编译?

最佳答案

不,GHC 目前没有这方面的工具。

关于haskell - GHC 明确强制要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51830730/

相关文章:

haskell - ihp/nix 如何将 wreq 添加到依赖项而不编译失败?

loops - 修复与 ArrowLoop

haskell - Atom 没有突出 Haskell 语法?

Haskell: "Not in scope: ' >>'"没有隐式前奏

haskell - 如何自动将 Data.Bits 添加到 Data.Modular?

haskell - 是否可以加载编译后的代码来提示?

haskell - 为什么 `seq` 中没有 `accursedUnutterablePerformIO` ?

list - 计算列表列表中的非空列表数量

c++ - 尝试将 C++ 绑定(bind)到 Haskell : getting undefined reference errors

haskell - 是否可以使用 cabal 将 c 代码与 Haskell 打包?