packages feed

dormouse-uri-0.1.0.0: src/Dormouse/Uri/QQ.hs

{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE DataKinds #-}

module Dormouse.Uri.QQ
  ( uri
  ) where
  
import Data.ByteString.Char8 (pack)
import Dormouse.Uri
import Language.Haskell.TH.Quote 
import Language.Haskell.TH 

uri :: QuasiQuoter
uri = QuasiQuoter 
  { quoteExp = \s -> 
      let res = parseUri $ pack s in
      case res of
        Left err -> fail $ show err
        Right x -> [| x :: Uri |]
  , quotePat = \s ->
      case parseUri (pack s) of
        Left err -> fail $ show err
        Right x  -> appE [|(==)|] [| (x :: Uri) |] `viewP` [p|True|]
  , quoteType = error "Not supported"
  , quoteDec =error "Not supported"
  }