2017-07-26 63 views

回答

6

->是一個關鍵字,不是中綴式函數。它沒有在Haskell基礎庫中定義,也不是。

(編輯:但作爲frasertweedale和瑞鷹Henrichs指出,它是由編譯器給予特殊待遇,使(->)可以作爲一個普通類構造進行處理。)

1

(->)不是一個關鍵字,但中綴式功能(你可以把它作爲一個參數,可以部分應用),但因爲它的重要性,它是由編譯器經過特殊處理:https://github.com/ghc/ghc/blob/75bf11c037d9e82f95ac9779bfd2b1432835bd76/compiler/types/TyCoRep.hs#L287

+0

這是編譯器的源代碼,而不是運行時。 - >肯定是關鍵字;請參閱https://wiki.haskell.org/Keywords#-.3E – Sneftel

+3

' - >'是在類型聲明中具有特殊處理的關鍵字,以使其可用,就像它是中綴型構造函數一樣。你是對的。或者都是錯誤的。取決於你想如何看待它。 –

4

(->),Haskell語言本身,是不是關鍵字但 a 類型的構造函數。即:

λ> :i (->) 
data (->) t1 t2  -- Defined in ‘GHC.Prim’ 
infixr 0 `(->)` 
instance Monad ((->) r) -- Defined in ‘GHC.Base’ 
instance Functor ((->) r) -- Defined in ‘GHC.Base’ 
instance Applicative ((->) a) -- Defined in ‘GHC.Base’ 
instance Monoid b => Monoid (a -> b) -- Defined in ‘GHC.Base’ 

它僅僅是一箇中綴式構造,你可以使用它只是 像任何其他類型的構造函數。

它在哪裏定義的問題有點棘手。 在源代碼GHC.Base你會發現下面的 評論:

GHC.Prim Has no implementation. It defines built-in things, and 
      by importing it you bring them into scope. 
      The source file is GHC.Prim.hi-boot, which is just 
      copied to make GHC.Prim.hi 

GHC的構建過程中直接產生的接口文件暴露與(->)相關聯的行爲。

+3

' - >'仍然是非常特別的魔法。如果你問GHCi':我( - >)',它會報告「定義在'GHC.Prim'」中,但是如果你問':i(GHC.Prim .->)',它會說「不在範圍內: GHC.Prim - >'」。是的,它是一個類型構造函數,但它不是*類型構造函數。奇怪的兩個主要方面:1.使用'RankNTypes',它可以應用於量化類型。 2.使用'GADTs'或'GADTSyntax',被定義的類型必須出現在每個構造函數類型的最後一個箭頭的末尾。 – dfeuer

相關問題