Haskell 如何复制';第h个拼接中的名称

Haskell 如何复制';第h个拼接中的名称,haskell,ghc,template-haskell,Haskell,Ghc,Template Haskell,考虑这个Haskell文件: {-# LANGUAGE TemplateHaskell #-} {-# OPTIONS_GHC -fplugin Test.Inspection.Plugin #-} module Text (main) where import Test.Inspection import Data.Text as T import Data.Text.Encoding as E import Data.ByteString (ByteString) import Lan

考虑这个Haskell文件:

{-# LANGUAGE TemplateHaskell #-}
{-# OPTIONS_GHC -fplugin Test.Inspection.Plugin #-}
module Text (main) where

import Test.Inspection

import Data.Text as T
import Data.Text.Encoding as E
import Data.ByteString (ByteString)

import Language.Haskell.TH

toUpperString :: String -> String
toUpperString = T.unpack . T.toUpper . T.pack

toUpperBytestring :: ByteString -> String
toUpperBytestring = T.unpack . T.toUpper . E.decodeUtf8

do Just n <- lookupValueName "toUpperString"
   inspect $ n `hasNoType` ''T.Text
inspect $ 'toUpperBytestring `hasNoType` ''T.Text

main :: IO ()
main = return ()
{-#语言模板haskell}
{-#选项#GHC-fplugin Test.Inspection.Plugin#-}
模块文本(主)在哪里
进口检验
导入数据。文本为T
将Data.Text.Encoding导入为E
导入Data.ByteString(ByteString)
导入语言.Haskell.TH
toUpperString::String->String
toUpperString=T.unpack。图珀。T.pack
toUpperBytestring::ByteString->String
toUpperBytestring=T.unpack。图珀。E.decodeUtf8

do Just n本例中的问题不在于
'foo
返回的
名称与
lookupValueName
不同,而在于使用
'foo
在整个模块编译过程中保持
foo
活动,而
lookupValueName“foo”
不活动。然后,GHC移除了
“foo”
的绑定,并在其上进行检查测试

实际上,从模块中删除导出列表(它保留了所有顶级绑定)可以解决问题。

有什么意见吗?