{-# 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 "" = "" trimTail s :: 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 +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 (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 (0, 0) acc :: (a, a) -> Char -> (a, a) acc (l :: a l, n :: a n) c :: Char c | Char -> Bool isSpace Char c = (a l, a n a -> a -> a forall a. Num a => a -> a -> a + 1) | Bool otherwise = (a n, a n a -> a -> a forall a. Num 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 :: (String -> Q Exp) -> (String -> Q Pat) -> (String -> Q Type) -> (String -> Q [Dec]) -> QuasiQuoter QuasiQuoter { quoteExp :: String -> Q Exp quoteExp = \filename :: 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 (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b >>= String -> Q Exp quoteExp }