在 GHCi 中,型別的FUN顯示如下:
λ> :k FUN
FUN :: forall (n :: Multiplicity) -> * -> * -> *
起初,我以為這是一種迂回的說法
FUN :: Multiplicity -> * -> * -> *
但事實證明 Template Haskell 有一個單獨的建構式用于這個表單:ForallVisT. 我找不到任何關于它的檔案,我什至不知道如何以有意義的方式開始試驗它。
這個語法是什么意思?forall a -> b與“正常”forall a. a -> b有何不同?
uj5u.com熱心網友回復:
forall a -> _當結果型別取決于顯式引數時使用。
-- type NonDep :: Type -> Type; argument is explicit
data NonDep (x :: Type) :: Type
-- type ImpDep :: forall a. Maybe a -> Type; first argument is implicit and dependent
data ImpDep (x :: Maybe a) :: Type
-- so if you want an explicit and dependent argument...
-- type ExpDep :: forall (a :: Type) -> Maybe a -> Type
data ExpDep (a :: Type) (x :: Maybe a) :: Type
奇怪的是FUN' 型別有forall (m :: Multiplicity) ->而不是Multiplicity ->因為以下引數(兩個隱式RuntimeReps 和兩個TYPEs)不依賴于它,但這就是圍繞 GHC 原語的怪異之處。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/445998.html
