{-# LANGUAGE TemplateHaskell #-}

module Axel.Utils.String where

import qualified Data.Text as T (pack, replace, unpack)

import GHC.Exts (IsString(fromString))

import Language.Haskell.TH.Quote (QuasiQuoter(QuasiQuoter))

replace :: String -> String -> String -> String
replace needle replacement haystack =
  T.unpack $ T.replace (T.pack needle) (T.pack replacement) (T.pack haystack)

-- Adapted from http://hackage.haskell.org/package/string-quote-0.0.1/docs/src/Data-String-Quote.html#s.
s :: QuasiQuoter
s =
  QuasiQuoter
    ((\a -> [|fromString a|]) . filter (/= '\r'))
    (error "Cannot use s as a pattern")
    (error "Cannot use s as a type")
    (error "Cannot use s as a dec")