{-# LANGUAGE TemplateHaskell #-}
module Data.String.Interpolate.IsString (i) where
import Data.String
import Language.Haskell.TH.Quote (QuasiQuoter(..))
import qualified Data.String.Interpolate as I
i :: QuasiQuoter
i :: QuasiQuoter
i = QuasiQuoter :: (String -> Q Exp)
-> (String -> Q Pat)
-> (String -> Q Type)
-> (String -> Q [Dec])
-> QuasiQuoter
QuasiQuoter {
quoteExp :: String -> Q Exp
quoteExp = \s :: String
s -> [|fromString $(quoteExp I.i $ s)|]
, quotePat :: String -> Q Pat
quotePat = String -> String -> Q Pat
forall a. String -> a
err "pattern"
, quoteType :: String -> Q Type
quoteType = String -> String -> Q Type
forall a. String -> a
err "type"
, quoteDec :: String -> Q [Dec]
quoteDec = String -> String -> Q [Dec]
forall a. String -> a
err "declaration"
}
where
err :: String -> a
err name :: String
name = String -> a
forall a. HasCallStack => String -> a
error ("Data.String.Interpolate.IsString.i: This QuasiQuoter can not be used as a " String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
name String -> String -> String
forall a. [a] -> [a] -> [a]
++ "!")