summaryrefslogtreecommitdiff
path: root/Data/String/Quote.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Data/String/Quote.hs')
-rw-r--r--Data/String/Quote.hs37
1 files changed, 37 insertions, 0 deletions
diff --git a/Data/String/Quote.hs b/Data/String/Quote.hs
new file mode 100644
index 0000000..7efe692
--- /dev/null
+++ b/Data/String/Quote.hs
@@ -0,0 +1,37 @@
+{-# LANGUAGE TemplateHaskell #-}
+
+-- | QuasiQuoter for non-interpolated strings, texts and bytestrings.
+--
+-- Originally by Audrey Tang <audreyt@audreyt.org>
+--
+-- The "s" quoter contains a multi-line string with no interpolation at all:
+--
+-- @
+-- {-\# LANGUAGE QuasiQuotes #-}
+-- import Data.Text (Text)
+-- import Data.String.Quote
+-- foo :: Text -- "String", "ByteString" etc also works
+-- foo = [s|
+--
+-- Well here is a
+-- multi-line string!
+--
+-- |]
+-- @
+--
+-- Any instance of the IsString type is permitted.
+module Data.String.Quote (s) where
+
+import Alpha
+import GHC.Exts (IsString (..))
+import qualified Language.Haskell.TH as TH
+import Language.Haskell.TH.Quote
+
+-- | QuasiQuoter for a non-interpolating IsString literal. The pattern portion is undefined.
+s :: QuasiQuoter
+s =
+ QuasiQuoter
+ ((\a -> [|fromString a|]) <. filter (/= '\r'))
+ (error "Cannot use q as a pattern")
+ (error "Cannot use q as a type")
+ (error "Cannot use q as a dec")