packages feed

peg-matching-0.1.0.0: src/Quote/Pattern.hs

{-|
Module      : Quote.Pattern
Description : QuasiQuoter for patterns.
Copyright   : (c) Guilherme Drummond, Rodrigo Ribeiro, 2025
License     : BSD-3-Clause
Maintainer  : rodrigo.ribeiro@ufop.edu.br
Stability   : experimental
Portability : POSIX

This module provides QuasiQuoters for patterns, including definitions, 
expressions, and PEG operators.
-}
module Quote.Pattern 
    ( patterns
    ) where

import Quote.Base ( topLevel, parseIO, location', setPosition )
import qualified Parser.Pattern as Pattern
import Language.Haskell.TH (runIO)
import Language.Haskell.TH.Quote (dataToExpQ, QuasiQuoter(..))

{-|
QuasiQuoter for pattern syntax.

Parses a pattern string at compile time and converts it into a Template
Haskell expression.
-}
patterns :: QuasiQuoter
patterns = QuasiQuoter {
        quoteExp = \ str -> do
            l <- location'
            c <- runIO $ parseIO (setPosition l *> topLevel Pattern.patterns) str
            dataToExpQ (const Nothing) c
        , quotePat  = undefined
        , quoteType = undefined
        , quoteDec  = undefined
    }