2016-08-15 3 views
1

Я использую simple quasiquoter from the Haskell Wiki для многострочных строк.Как исправить предупреждение QuasiQuoter?

import Language.Haskell.TH 
import Language.Haskell.TH.Quote 

str = QuasiQuoter { quoteExp = stringE } 

Я получаю следующее предупреждение:

Fields of ‘QuasiQuoter’ not initialised: quotePat, quoteType, 
              quoteDec 
    In the expression: QuasiQuoter {quoteExp = stringE} 
    In an equation for ‘str’: str = QuasiQuoter {quoteExp = stringE} 

Что такое правильный способ подавить это предупреждение? Должен ли я инициализировать quotePat и т. Д., Возможно, не определен или что-то еще?

ответ

1

из https://hackage.haskell.org/package/template-haskell/docs/Language-Haskell-TH-Quote.html#t:QuasiQuoter

, если вы заинтересованы только в определении quasiquoter, который будет использоваться для выражений, вы бы определить QuasiQuoter только quoteExp и оставить остальные поля затушили с ошибками.

Так что, используя неопределенные поля QQ, кажется, все в порядке. Если вы хотите просто подавить воюние, вы можете попробовать:

qqUndef = QuasiQuoter {quoteExp = undefined , 
         quotePat = undefined , 
         quoteType = undefined, 
         quoteDec = undefined } 

-- replace only quoteExp 
str = qqUndef { quoteExp = stringE } 
+0

Спасибо! Да, я просто хотел подавить предупреждение. –

+1

Я обновил ваш ответ на код, который я использовал, используя 'error '", а не просто 'undefined'. Надеюсь, это означает, что если я неправильно использую 'str', это будет не так сложно отследить. –

 Смежные вопросы

  • Нет связанных вопросов^_^