代码之家  ›  专栏  ›  技术社区  ›  Greg Nisbet

GHC明确要求

  •  2
  • Greg Nisbet  · 技术社区  · 6 年前

    语言扩展 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)
    

    是否有一些语言扩展或编译器标志的组合会导致第二个程序无法编译?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Daniel Wagner    6 年前

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