2017-02-23 2 views
2

Ich möchte diese Datentypen in Haskell verwenden:Wie Name "Typ" für ein Schlüsselfeld verwenden?

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

Aber der Name type wird von Haskell nicht akzeptiert, weil es ein reserviertes Schlüsselwort ist.

Gibt es eine Möglichkeit, es zu benutzen? Da type kein aus einem Paket exportiertes Objekt ist, kann ich dieses Problem nicht lösen, indem ich import ... hiding (type) tue.

+0

'Typ' ist eine reservierte Arbeit, ich glaube nicht, dass es eine Möglichkeit gibt, sie zu benutzen. Ich denke, Standardverfahren wäre, einen Unterstrich (wie '_type' oder' type_') hinzuzufügen oder einen anderen Namen zu wählen. – ryachza

+0

warum nicht 'typ''? –

+0

Ja, '_type' ist was ich gerade mache. –

Antwort

3

Beachten Sie, dass type ein Schlüsselwort in Haskell ist, das zum Definieren von Synonymen verwendet wird. Aussehen: type is a keyword.

Auch getestet auf ghc-8.0.1, und es hat funktioniert.

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

Ich bin nicht derjenige, der downvooted, aber meinst du, es ist nicht möglich? –

+0

Ich glaube, dass es nicht möglich ist, Schlüsselwörter als Datensatzfelder zu verwenden. Es sollte jedoch möglich sein, '_type' oder andere Varianten zu verwenden. –

0

Wie Sie festgestellt haben, können Sie ein reserviertes Wort nicht als Kennung verwenden.


Was ich tun möchte, ist meinen Namen in Rekord-Syntax mit dem Typnamen voranstellen, wie dies:

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

Dies auch Auseinandersetzungen mögliche Namen mit anderen Funktionen mit gemeinsamen Namen verhindert.

Alternativ können Sie, wie in den Kommentaren angegeben, ein Symbol wie _ oder ' zu Ihrem Namen hinzufügen, um es vom Schlüsselwort zu unterscheiden.

Verwandte Themen