chiasma-0.2.0.0: lib/Chiasma/Codec/Query.hs
{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE TypeOperators #-}
module Chiasma.Codec.Query where
import Data.Char (isUpper, toLower)
import qualified Data.Text as Text (concatMap, singleton)
import GHC.Generics (C1, D1, S1, Selector, selName, (:*:))
class TmuxDataQuery f where
query' :: [Text]
instance TmuxDataQuery f => (TmuxDataQuery (D1 c f)) where
query' = query' @f
instance TmuxDataQuery f => (TmuxDataQuery (C1 c f)) where
query' = query' @f
instance (TmuxDataQuery f, TmuxDataQuery g) => TmuxDataQuery (f :*: g) where
query' = query' @f <> query' @g
trans :: Char -> Text
trans a | isUpper a = toText @String ['_', toLower a]
trans a = Text.singleton a
snakeCase :: Text -> Text
snakeCase =
Text.concatMap trans
formatQuery :: Text -> Text
formatQuery q = "#{" <> snakeCase q <> "}"
instance Selector s => (TmuxDataQuery (S1 s f)) where
query' =
[formatQuery (toText query)]
where
query = selName (undefined :: t s f p)