{-# LANGUAGE CPP #-} module PgSchema.Utils.Internal where import Data.Kind import Data.List as L import Data.Singletons import Data.String import Data.Text as T import Prelude as P #ifdef DEBUG import Debug.Trace #endif fromText :: IsString t => Text -> t fromText :: forall t. IsString t => Text -> t fromText = String -> t forall a. IsString a => String -> a fromString (String -> t) -> (Text -> String) -> Text -> t forall b c a. (b -> c) -> (a -> b) -> a -> c . Text -> String T.unpack {-# INLINE fromText #-} show' :: (IsString b, Show a) => a -> b show' :: forall b a. (IsString b, Show a) => a -> b show' = String -> b forall a. IsString a => String -> a fromString (String -> b) -> (a -> String) -> a -> b forall b c a. (b -> c) -> (a -> b) -> a -> c . a -> String forall a. Show a => a -> String P.show {-# INLINE show' #-} intercalate' :: Monoid a => a -> [a] -> a intercalate' :: forall a. Monoid a => a -> [a] -> a intercalate' a a = [a] -> a forall a. Monoid a => [a] -> a mconcat ([a] -> a) -> ([a] -> [a]) -> [a] -> a forall b c a. (b -> c) -> (a -> b) -> a -> c . a -> [a] -> [a] forall a. a -> [a] -> [a] L.intersperse a a {-# INLINE intercalate' #-} unlines' :: (Monoid a, IsString a) => [a] -> a unlines' :: forall a. (Monoid a, IsString a) => [a] -> a unlines' = a -> [a] -> a forall a. Monoid a => a -> [a] -> a intercalate' a "\n" {-# INLINE unlines' #-} type ToStar a = (SingKind (KindOf a), SingI a) trace' :: String -> a -> a traceShow' :: Show a => a -> b -> b #ifdef DEBUG trace' = trace . (<> "\n============") . ("=== Debug ===\n" <>) traceShow' a = trace $ "=== Debug ===\n" <> P.show a <> "\n============" #else trace' :: forall a. String -> a -> a trace' String _ = a -> a forall a. a -> a id traceShow' :: forall a b. Show a => a -> b -> b traceShow' a _ = b -> b forall a. a -> a id #endif {-# INLINE trace' #-} {-# INLINE traceShow' #-} type family IsMaybe (x :: Type) :: Bool where IsMaybe (Maybe a) = 'True IsMaybe a = 'False type family UnMaybe (x :: Type) :: Type where UnMaybe (Maybe a) = a UnMaybe a = a