2015-11-01 47 views
2

如何查找類型運算符名稱?這不起作用:模板Haskell - 如何查找類型運算符名稱?

IssueTH.hs:

{-# LANGUAGE TemplateHaskell #-} 
module IssueTH where 
import Language.Haskell.TH 

f :: Q [Dec] 
f = do 
    Just n <- lookupTypeName "GHC.TypeLits.*" 
    return [] 

Issue.hs:

{-# LANGUAGE TemplateHaskell #-} 
module Issue where 
import IssueTH 

$f 

ghc Issue.hs失敗消息:

Pattern match failure in do expression at IssueTH.hs 

"GHC.TypeLits.(*)""*"沒有按更換"GHC.TypeLits.*"也不行。

+0

1.您在第二個文件中缺少'import GHC.TypeLits',即使使用非運算符類型也不行。修復後,這仍然看起來像一個錯誤,所以我[報告](https://ghc.haskell.org/trac/ghc/ticket/11046#ticket)。 –

+0

我[剛剛發現](https://ghc.haskell.org/trac/ghc/ticket/11046#comment:1),它適用於類型操作符以':'開頭,所以我的猜測是函數wasn'當他們的語法被放開時,t更新。 –

+0

@ØrjanJohansen,我查找完全限定的「GHC.TypeLits。*」,我不認爲我需要導入GHC.TypeLits,但它仍然無法正常工作,如您所見。 –

回答

3

我想我現在有足夠的時間做一個簡短的回答。唉,我只找到你的問題的原因,但沒有如何解決它。

我的測試顯示,lookupTypeName確實是支持類型運算符,但前提是它們以:開頭。

最初這是一個要求,類似於中綴數據構造函數,但是這被提升以允許諸如GHC.TypeLits中的算術類型運算符之類的東西。 (缺點是,你可以不再有類型的操作變量,因爲是搞什麼Arrow代碼一度流行。)

大概lookupTypeName沒有更新,考慮到這一點,我有filed a bug report這一點。

編輯:這個問題的解決方案已經終於完成了,應該在即將到來的GHC 8.2.1中。