+++ /dev/null
-{-# LANGUAGE
- UnicodeSyntax
- , ViewPatterns
- #-}
--- |A module to provide 'QuasiQuoter' for 'MIMEType' literals.
-module Network.HTTP.Lucu.MIMEType.TH
- ( mimeType
- )
- where
-import Control.Monad.Unicode
-import Data.Ascii (Ascii)
-import Data.Attempt
-import Data.Convertible.Base
-import Language.Haskell.TH.Syntax
-import Language.Haskell.TH.Quote
-import Network.HTTP.Lucu.MIMEType hiding (mimeType)
-import Network.HTTP.Lucu.Utils
-import Prelude.Unicode
-
--- |'QuasiQuoter' for 'MIMEType' literals.
---
--- @
--- textPlain :: 'MIMEType'
--- textPlain = ['mimeType'| text/plain; charset=\"UTF-8\" |]
--- @
-mimeType ∷ QuasiQuoter
-mimeType = QuasiQuoter {
- quoteExp = (lift =≪) ∘ (parse =≪) ∘ toAscii
- , quotePat = const unsupported
- , quoteType = const unsupported
- , quoteDec = const unsupported
- }
- where
- parse ∷ Monad m ⇒ Ascii → m MIMEType
- parse a
- = case ca a of
- Success t → return t
- Failure e → fail (show e)
-
- toAscii ∷ Monad m ⇒ String → m Ascii
- toAscii (trim → s)
- = case ca s of
- Success a → return a
- Failure e → fail (show e)
-
- unsupported ∷ Monad m ⇒ m α
- unsupported = fail "Unsupported usage of mimeType quasi-quoter."