{-# LANGUAGE MultiParamTypeClasses #-}
module Util.Pretty (
module Text.PrettyPrint.Annotated.Leijen
, Sized(..)
, nestingSize
, Pretty(..)
) where
import Text.PrettyPrint.Annotated.Leijen
class Sized a where
size :: a -> Int
instance (Sized a, Sized b) => Sized (a, b) where
size :: (a, b) -> Int
size (a
left, b
right) = Int
1 forall a. Num a => a -> a -> a
+ forall a. Sized a => a -> Int
size a
left forall a. Num a => a -> a -> a
+ forall a. Sized a => a -> Int
size b
right
instance Sized a => Sized [a] where
size :: [a] -> Int
size = forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
sum forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (a -> b) -> [a] -> [b]
map forall a. Sized a => a -> Int
size
nestingSize :: Int
nestingSize :: Int
nestingSize = Int
1
class Pretty a ty where
pretty :: a -> Doc ty