{-# LANGUAGE NamedFieldPuns #-} {-# OPTIONS_GHC -fno-warn-missing-fields #-} module Data.String.Here.Internal (trim, quoteDependentFile) where import Data.Char import Language.Haskell.TH.Quote import Language.Haskell.TH.Syntax trim :: String -> String trim :: String -> String trim = String -> String trimTail (String -> String) -> (String -> String) -> String -> String forall b c a. (b -> c) -> (a -> b) -> a -> c . (Char -> Bool) -> String -> String forall a. (a -> Bool) -> [a] -> [a] dropWhile Char -> Bool isSpace trimTail :: String -> String trimTail :: String -> String trimTail String "" = String "" trimTail String s = Int -> String -> String forall a. Int -> [a] -> [a] take (String -> Int lastNonBlank String s) String s where lastNonBlank :: String -> Int lastNonBlank = (Int -> Int -> Int forall a. Num a => a -> a -> a +Int 1) (Int -> Int) -> (String -> Int) -> String -> Int forall b c a. (b -> c) -> (a -> b) -> a -> c . (Int, Int) -> Int forall a b. (a, b) -> a fst ((Int, Int) -> Int) -> (String -> (Int, Int)) -> String -> Int forall b c a. (b -> c) -> (a -> b) -> a -> c . ((Int, Int) -> Char -> (Int, Int)) -> (Int, Int) -> String -> (Int, Int) forall b a. (b -> a -> b) -> b -> [a] -> b forall (t :: * -> *) b a. Foldable t => (b -> a -> b) -> b -> t a -> b foldl (Int, Int) -> Char -> (Int, Int) forall {a}. Num a => (a, a) -> Char -> (a, a) acc (Int 0, Int 0) acc :: (a, a) -> Char -> (a, a) acc (a l, a n) Char c | Char -> Bool isSpace Char c = (a l, a n a -> a -> a forall a. Num a => a -> a -> a + a 1) | Bool otherwise = (a n, a n a -> a -> a forall a. Num a => a -> a -> a + a 1) quoteDependentFile :: QuasiQuoter -> QuasiQuoter quoteDependentFile :: QuasiQuoter -> QuasiQuoter quoteDependentFile QuasiQuoter {String -> Q Exp quoteExp :: QuasiQuoter -> String -> Q Exp quoteExp :: String -> Q Exp quoteExp} = QuasiQuoter { quoteExp :: String -> Q Exp quoteExp = \String filename -> do String -> Q () addDependentFile String filename IO String -> Q String forall a. IO a -> Q a runIO (String -> IO String readFile String filename) Q String -> (String -> Q Exp) -> Q Exp forall a b. Q a -> (a -> Q b) -> Q b forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b >>= String -> Q Exp quoteExp }