Template Haskell中含单引号名称的使用问题及解决办法
解决Template Haskell中含特殊单引号的名称引用问题
在Template Haskell里,通常我们用'名称的语法来引用绑定或数据构造器,比如:
showName, justName :: Name showName = 'show justName = 'Just
但如果要引用的名称第二个字符是单引号(比如a'baz),直接写'a'baz会被编译器误解析——'a'会被当成字符字面量,剩下的baz就会触发语法错误。解决方法有两种:
用
mkName构造Name值:这是最通用的方案,不管名称里有什么特殊字符都能处理,直接把名称字符串传给mkName就行:import Language.Haskell.TH specialName :: Name specialName = mkName "a'baz"用反引号包裹名称配合引号语法:在单引号后面用反引号把整个特殊名称括起来,编译器就会把反引号内的内容当成完整的名称解析:
specialName :: Name specialName = '`a'baz`
前者适合动态生成名称的场景,后者更适合静态引用时保持语法直观。
内容的提问来源于stack exchange,提问作者dfeuer
相关产品推荐
相关产品推荐

