代码之家  ›  专栏  ›  技术社区  ›  vincedjango

在函数签名中键入变量

  •  2
  • vincedjango  · 技术社区  · 7 年前

    如果我这样做

    functionS (x,y) = y
    :t functionS
    functionS :: (a, b) -> b
    

    现在使用此功能:

    functionC x y = if (x > y) then True else False
    :t function
    

    我希望得到:

    functionC :: (Ord a, Ord b) => a -> b -> Bool
    

    但我得到:

    functionC :: Ord a => a -> a -> Bool
    

    ghci似乎对前面的两个结果没意见,但是为什么它给了我第二个结果呢?为什么没有定义类型变量A和B?

    1 回复  |  直到 7 年前
        1
  •  3
  •   luqui    7 年前

    functionS :: (a,b) -> b
    functionS (x,y) = y
    

    (_,_) (a,b) a b (x,y) x y

    functionS :: Pair a b -> b
    functionS (x,y) = y
    

    functionC :: Ord a => a -> a -> Bool
    

    Ord a Integer String shenanigans

    functionS

    推荐文章