Haskell 如何复制';第h个拼接中的名称
考虑这个Haskell文件: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
{-# 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”
的绑定,并在其上进行检查测试
实际上,从模块中删除导出列表(它保留了所有顶级绑定)可以解决问题。有什么意见吗?