2015-02-03 2 views
1

Есть ли способ получить (импорт из базовых модулей или выражение для записи) значение типа Language.Haskell.TH.Name, которое представляет '[] без включения -XTemplateHaskell?Получение TH.Name для '[] без -XTemplateHaskell

Причиной этого является то, что такие инструменты, как hlint, не очень хорошо взаимодействуют с TH, и поэтому их можно избежать. Тогда я мог бы поставить определение

nilName :: Name 
nilName = '[] 

в отдельный файл и импортировать его, но это имеет смысл только, если нет стандартного имени, с помощью которого он может быть импортирован или называется. Кроме того, nilName не может использоваться в совпадениях шаблонов. Что-то подобное существует?

+0

Что случилось с 'mkName" [] "'? – user2407038

+0

Попробуйте 'mkName" [] "== '[]'. Это дает «ложь». –

ответ

2
import Language.Haskell.TH.Syntax 

nilName = mkNameG DataName "ghc-prim" "GHC.Types" "[]" 

является эквивалентным определением nilName, несмотря на то, что это некрасиво. Она может быть расширена до такой формы, которая допускает, чтобы сопоставления с образцом уступая

nilName = Name (OccName "[]") (NameG DataName (PkgName "ghc-prim") (ModName "GHC.Types")) 

который не лучше, ни надежный. Кажется, что лучший маршрут вперед представляет собой комбинацию вышеописанного nilName, определенного в отдельном модуле с поддержкой TH, а также вместо (== nilName) вместо соответствия шаблону.