语言扩展
ExplicitForall
使绑定类型变量成为可能,但不是必需的
forall
例如,以下程序编译
{-# 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)
是否有一些语言扩展或编译器标志的组合会导致第二个程序无法编译?