如何使用名称"键入"关键字段?

时间:2017-02-23 15:03:04

标签: haskell

我想在Haskell中使用这种数据类型:

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

但Haskell不接受名称type,因为它是保留关键字。

有没有办法使用它?由于type不是从包中导出的对象,因此我无法通过执行import ... hiding (type)来解决此问题。

2 个答案:

答案 0 :(得分:3)

请注意,type是Haskell中用于定义类型同义词的关键字。看:type is a keyword

还在ghc-8.0.1上对此进行了测试,并且有效。

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

答案 1 :(得分:0)

正如您所收集的,您不能使用保留字作为标识符。

我喜欢做的是在记录语法中使用类型名称作为名称的前缀,例如:

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

这也可以防止与其他具有通用名称的函数发生潜在的名称冲突。

或者,正如评论中指出的那样,您可以在名称中添加_'等符号,以区别于关键字。