{-# LANGUAGE FlexibleContexts #-}

module HaskellWorks.Data.MQuery.Shows where

import HaskellWorks.Data.MQuery.Micro

showsVs :: Show a => [a] -> String -> String
showsVs :: [a] -> String -> String
showsVs (a
kv:[a]
kvs) = a -> String -> String
forall a. Show a => a -> String -> String
shows a
kv (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((String -> String) -> (String -> String) -> String -> String)
-> (String -> String) -> [String -> String] -> String -> String
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
(.) String -> String
forall a. a -> a
id ((\a
jv -> (String
", " String -> String -> String
forall a. [a] -> [a] -> [a]
++) (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> String -> String
forall a. Show a => a -> String -> String
shows a
jv) (a -> String -> String) -> [a] -> [String -> String]
forall a b. (a -> b) -> [a] -> [b]
`map` [a]
kvs)
showsVs []       = String -> String
forall a. a -> a
id

showKvs :: Show (Micro a) => [a] -> String -> String
showKvs :: [a] -> String -> String
showKvs (a
kv:[a]
kvs) = Micro a -> String -> String
forall a. Show a => a -> String -> String
shows (a -> Micro a
forall a. a -> Micro a
Micro a
kv) (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((String -> String) -> (String -> String) -> String -> String)
-> (String -> String) -> [String -> String] -> String -> String
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
(.) String -> String
forall a. a -> a
id ((\a
jv -> (String
", " String -> String -> String
forall a. [a] -> [a] -> [a]
++) (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Micro a -> String -> String
forall a. Show a => a -> String -> String
shows (a -> Micro a
forall a. a -> Micro a
Micro a
jv)) (a -> String -> String) -> [a] -> [String -> String]
forall a b. (a -> b) -> [a] -> [b]
`map` [a]
kvs)
showKvs []       = String -> String
forall a. a -> a
id