{-# LANGUAGE FlexibleInstances, OverlappingInstances, UndecidableInstances, Rank2Types, ScopedTypeVariables #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Text.StringTemplate.GenericStandard() where
import qualified Data.Map as M
import Text.StringTemplate.Classes
import Text.StringTemplate.Instances()
import Data.Generics.Basics
import Data.Generics.Aliases
import qualified Data.ByteString.Char8 as B
import qualified Data.ByteString.Lazy.Char8 as LB
import qualified Data.Text as T
import qualified Data.Text.Lazy as LT
gToSElem :: forall a b.(Data a, Stringable b) => a -> SElem b
gToSElem :: forall a b. (Data a, Stringable b) => a -> SElem b
gToSElem = (\a
x ->
case (forall a b. (a -> b) -> [a] -> [b]
map String -> String
stripInitUnder (Constr -> [String]
constrFields forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Data a => a -> Constr
toConstr forall a b. (a -> b) -> a -> b
$ a
x)) of
[] -> forall a. [SElem a] -> SElem a
LI (forall a. String -> SElem a
STR (Constr -> String
showConstr (forall a. Data a => a -> Constr
toConstr a
x)) forall a. a -> [a] -> [a]
:
forall a u. Data a => (forall d. Data d => d -> u) -> a -> [u]
gmapQ forall a b. (Data a, Stringable b) => a -> SElem b
gToSElem a
x)
[String]
fs -> forall a. SMap a -> SElem a
SM (forall k a. Ord k => [(k, a)] -> Map k a
M.fromList (forall a b. [a] -> [b] -> [(a, b)]
zip [String]
fs (forall a u. Data a => (forall d. Data d => d -> u) -> a -> [u]
gmapQ forall a b. (Data a, Stringable b) => a -> SElem b
gToSElem a
x)))
)
forall d (t :: * -> *) q.
(Data d, Typeable t) =>
(d -> q) -> (forall e. Data e => t e -> q) -> d -> q
`ext1Q` (\Maybe e
t -> case Maybe e
t of (Just e
x) -> forall a b. (Data a, Stringable b) => a -> SElem b
gToSElem e
x; Maybe e
_ -> forall a. SElem a
SNull)
forall d (t :: * -> *) q.
(Data d, Typeable t) =>
(d -> q) -> (forall e. Data e => t e -> q) -> d -> q
`ext1Q` (forall a. SMap a -> SElem a
SM forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap forall a b. (Data a, Stringable b) => a -> SElem b
gToSElem)
forall d (t :: * -> *) q.
(Data d, Typeable t) =>
(d -> q) -> (forall e. Data e => t e -> q) -> d -> q
`ext1Q` (forall a. [SElem a] -> SElem a
LI forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (a -> b) -> [a] -> [b]
map forall a b. (Data a, Stringable b) => a -> SElem b
gToSElem)
forall a b q.
(Typeable a, Typeable b) =>
(a -> q) -> (b -> q) -> a -> q
`extQ` (forall a b. (ToSElem a, Stringable b) => a -> SElem b
toSElem :: Char -> SElem b)
forall a b q.
(Typeable a, Typeable b) =>
(a -> q) -> (b -> q) -> a -> q
`extQ` (forall a b. (ToSElem a, Stringable b) => a -> SElem b
toSElem :: LB.ByteString -> SElem b)
forall a b q.
(Typeable a, Typeable b) =>
(a -> q) -> (b -> q) -> a -> q
`extQ` (forall a b. (ToSElem a, Stringable b) => a -> SElem b
toSElem :: B.ByteString -> SElem b)
forall a b q.
(Typeable a, Typeable b) =>
(a -> q) -> (b -> q) -> a -> q
`extQ` (forall a b. (ToSElem a, Stringable b) => a -> SElem b
toSElem :: LT.Text -> SElem b)
forall a b q.
(Typeable a, Typeable b) =>
(a -> q) -> (b -> q) -> a -> q
`extQ` (forall a b. (ToSElem a, Stringable b) => a -> SElem b
toSElem :: T.Text -> SElem b)
forall a b q.
(Typeable a, Typeable b) =>
(a -> q) -> (b -> q) -> a -> q
`extQ` (forall a b. (ToSElem a, Stringable b) => a -> SElem b
toSElem :: Bool -> SElem b)
forall a b q.
(Typeable a, Typeable b) =>
(a -> q) -> (b -> q) -> a -> q
`extQ` (forall a b. (ToSElem a, Stringable b) => a -> SElem b
toSElem :: Float -> SElem b)
forall a b q.
(Typeable a, Typeable b) =>
(a -> q) -> (b -> q) -> a -> q
`extQ` (forall a b. (ToSElem a, Stringable b) => a -> SElem b
toSElem :: Double -> SElem b)
forall a b q.
(Typeable a, Typeable b) =>
(a -> q) -> (b -> q) -> a -> q
`extQ` (forall a b. (ToSElem a, Stringable b) => a -> SElem b
toSElem :: Int -> SElem b)
forall a b q.
(Typeable a, Typeable b) =>
(a -> q) -> (b -> q) -> a -> q
`extQ` (forall a b. (ToSElem a, Stringable b) => a -> SElem b
toSElem :: Integer -> SElem b)
forall a b q.
(Typeable a, Typeable b) =>
(a -> q) -> (b -> q) -> a -> q
`extQ` (forall a b. (ToSElem a, Stringable b) => a -> SElem b
toSElem :: String -> SElem b)
instance Data a => ToSElem a
where toSElem :: forall b. Stringable b => a -> SElem b
toSElem = forall a b. (Data a, Stringable b) => a -> SElem b
gToSElem
stripInitUnder :: String -> String
stripInitUnder :: String -> String
stripInitUnder (Char
'_':String
s) = String -> String
stripInitUnder String
s
stripInitUnder String
s = String
s