2017-02-23 78 views
2

我想在Haskell使用這種數據類型:如何使用名稱「type」作爲關鍵字段?

data DirTree = DirTree { 
       name  :: FilePath, 
       type :: Text, 
       children :: Maybe [DirTree] 
       } 

但名稱type不被接受的Haskell,因爲它是一個保留關鍵字。

有沒有辦法使用它?由於type不是從包中導出的對象,因此我無法通過執行import ... hiding (type)來解決此問題。

+0

'type'是一個保留的工作,我不認爲有任何方法可以使用它。我認爲標準的過程是增加一個下劃線(比如'_type'或'type_'),或者選擇一個不同的名字。 – ryachza

+0

爲什麼不''''? –

+0

是的,'_type'就是我目前正在做的事情。 –

回答

3

請注意,type是Haskell中用於定義類型同義詞的關鍵字。看:type is a keyword

也在ghc-8.0.1上測試過了,它工作正常。

data DirTree = DirTree { 
      name  :: FilePath, 
      _type :: Text, 
      children :: Maybe [DirTree] 
      } 
+0

我不是那個低調的人,但你的意思是不可能的? –

+0

我認爲使用關鍵字作爲記錄字段是不可能的。但應該可以使用'_type'或其他一些變體。 –

0

正如您所蒐集的,您不能使用保留字作爲標識符。


我喜歡做的是與類型名稱記錄語法,比如這個前綴的名字我:

data DirTree = DirTree { dirTreeName  :: FilePath, 
         dirTreeType  :: Text, 
         dirTreeChildren :: Maybe [DirTree] } 

這也可以防止潛在的名稱衝突與通用名稱等功能。

另外,正如它在評論中指出的那樣,您可以在名稱中添加一個符號,如_',以便將其與關鍵字區分開來。

相關問題