2017-02-23 19 views
2

私はHaskellで、このデータ型を使用したいと思います:キーフィールドに「タイプ」という名前を使用するにはどうすればよいですか?

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

しかし、それは予約語であるため、名前typeは、ハスケルによって受け付けられません。

使用方法はありますか? 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] } 

また、これは一般的な名前を持つ他の機能との潜在的な名前の衝突を防ぐことができます。

また、コメントに指摘されているように、キーワードと区別するために、_または'のような記号を名前に追加することもできます。

関連する問題