packages feed

context-free-grammar-0.1.1: src/Data/Cfg/Bnf/QQ.hs

-- | 'QuasiQuoter' for BNF source.
module Data.Cfg.Bnf.QQ
  ( bnf
  ) where

import Data.Cfg.Bnf.Parser
import Language.Haskell.TH.Quote

-- | 'QuasiQuoter' for BNF source.  Generates a value of type
-- 'Grammar'.  Not usable in pattern, type or declaration positions.
bnf :: QuasiQuoter
bnf =
  QuasiQuoter
    { quoteExp = dataToExpQ (const Nothing) . parse
    , quotePat = err
    , quoteType = err
    , quoteDec = err
    }
  where
    err _ = error "The bnf quasiquoter is only allowed in Exp position."