爲什麼不在下面的類型檢查? _
的類型被推斷爲Double。模式匹配推斷類型
{-# LANGUAGE ScopedTypeVariables, Rank2Types #-}
module Main (main) where
data D a = D a
main =
let
n = D (1 :: forall a. (Floating a) => a)
in
case n of
D (_ :: forall a. (Floating a) => a) -> return()
Haskell不支持'D(forall a。(Floating a)=> a)'這樣的類型,它看起來像你在'n'這裏實際需要的類型,因爲這需要impandicative多態性。雖然'1'在這裏確實是多態的,但由於Haskell的類型默認規則(否則該類型將被認爲是不明確的),「D 1」仍然默認爲「D Double」。 –