{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE OverloadedStrings #-} module HaskellWorks.Data.MQuery.Mini where import HaskellWorks.Data.MQuery.AtLeastSize import HaskellWorks.Data.MQuery.Micro import Prettyprinter import qualified Data.DList as DL newtype Mini a = Mini a instance Pretty (Micro a) => Pretty (Mini [a]) where pretty :: forall ann. Mini [a] -> Doc ann pretty (Mini [a] xs) | [a] xs [a] -> Int -> Bool forall a. AtLeastSize a => a -> Int -> Bool `atLeastSize` Int 11 = Doc ann "[" Doc ann -> Doc ann -> Doc ann forall a. Semigroup a => a -> a -> a <> Int -> Doc ann -> Doc ann forall ann. Int -> Doc ann -> Doc ann nest Int 2 ([Micro a] -> Doc ann forall a ann. Pretty a => [a] -> Doc ann 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 ann -> Doc ann -> Doc ann forall a. Semigroup a => a -> a -> a <> Doc ann ", ..]" pretty (Mini [a] xs) | [a] xs [a] -> Int -> Bool forall a. AtLeastSize a => a -> Int -> Bool `atLeastSize` Int 1 = Doc ann "[" Doc ann -> Doc ann -> Doc ann forall a. Semigroup a => a -> a -> a <> Int -> Doc ann -> Doc ann forall ann. Int -> Doc ann -> Doc ann nest Int 2 ([Micro a] -> Doc ann forall a ann. Pretty a => [a] -> Doc ann 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 ann -> Doc ann -> Doc ann forall a. Semigroup a => a -> a -> a <> Doc ann "]" pretty (Mini [a] _ ) = Doc ann "[]" instance Pretty (Mini a) => Pretty (Mini (DL.DList a)) where pretty :: forall ann. Mini (DList a) -> Doc ann pretty (Mini DList a xs) = [Doc ann] -> Doc ann forall ann. [Doc ann] -> Doc ann vcat (Doc ann -> [Doc ann] -> [Doc ann] forall ann. Doc ann -> [Doc ann] -> [Doc ann] punctuate Doc ann "," ((Mini a -> Doc ann forall a ann. Pretty a => a -> Doc ann forall ann. Mini a -> Doc ann pretty (Mini a -> Doc ann) -> (a -> Mini a) -> a -> Doc ann forall b c a. (b -> c) -> (a -> b) -> a -> c . a -> Mini a forall a. a -> Mini a Mini) (a -> Doc ann) -> [a] -> [Doc ann] 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)))