{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} module HaskellWorks.Data.MQuery.Mini where import HaskellWorks.Data.MQuery.AtLeastSize import HaskellWorks.Data.MQuery.Micro import Text.PrettyPrint.ANSI.Leijen import qualified Data.DList as DL newtype Mini a = Mini a instance Pretty (Micro a) => Pretty (Mini [a]) where pretty :: Mini [a] -> Doc pretty (Mini [a] xs) | [a] xs [a] -> Int -> Bool forall a. AtLeastSize a => a -> Int -> Bool `atLeastSize` Int 11 = String -> Doc text String "[" Doc -> Doc -> Doc forall a. Semigroup a => a -> a -> a <> Int -> Doc -> Doc nest Int 2 ([Micro a] -> Doc forall a. Pretty a => [a] -> Doc prettyVs (Int -> [Micro a] -> [Micro a] forall a. Int -> [a] -> [a] take Int 10 (a -> Micro a forall a. a -> Micro a Micro (a -> Micro a) -> [a] -> [Micro a] forall a b. (a -> b) -> [a] -> [b] `map` [a] xs))) Doc -> Doc -> Doc forall a. Semigroup a => a -> a -> a <> String -> Doc text String ", ..]" pretty (Mini [a] xs) | [a] xs [a] -> Int -> Bool forall a. AtLeastSize a => a -> Int -> Bool `atLeastSize` Int 1 = String -> Doc text String "[" Doc -> Doc -> Doc forall a. Semigroup a => a -> a -> a <> Int -> Doc -> Doc nest Int 2 ([Micro a] -> Doc forall a. Pretty a => [a] -> Doc prettyVs (Int -> [Micro a] -> [Micro a] forall a. Int -> [a] -> [a] take Int 10 (a -> Micro a forall a. a -> Micro a Micro (a -> Micro a) -> [a] -> [Micro a] forall a b. (a -> b) -> [a] -> [b] `map` [a] xs))) Doc -> Doc -> Doc forall a. Semigroup a => a -> a -> a <> String -> Doc text String "]" pretty (Mini [a] _ ) = String -> Doc text String "[]" instance Pretty (Mini a) => Pretty (Mini (DL.DList a)) where pretty :: Mini (DList a) -> Doc pretty (Mini DList a xs) = [Doc] -> Doc vcat (Doc -> [Doc] -> [Doc] punctuate (String -> Doc text String ",") ((Mini a -> Doc forall a. Pretty a => a -> Doc pretty (Mini a -> Doc) -> (a -> Mini a) -> a -> Doc forall b c a. (b -> c) -> (a -> b) -> a -> c . a -> Mini a forall a. a -> Mini a Mini) (a -> Doc) -> [a] -> [Doc] forall a b. (a -> b) -> [a] -> [b] `map` Int -> [a] -> [a] forall a. Int -> [a] -> [a] take Int 10 (DList a -> [a] forall a. DList a -> [a] DL.toList DList a xs)))