module Numeric.Probability.PrintList where
import Data.List (intersperse)
newtype Lines a = Lines [a]
instance Show a => Show (Lines a) where
show (Lines xs) = printList ("","\n","") show xs
asLines :: [a] -> Lines a
asLines = Lines
showNQ :: Show a => a -> String
showNQ = filter ('"'/=) . show
indent :: Int -> Int -> [Char]
indent i l = take (i*l) (repeat ' ')
printList :: ([a],[a],[a]) -> (b -> [a]) -> [b] -> [a]
printList (sep0,sep1,sep2) f xs =
sep0++concat (intersperse sep1 (map f xs))++sep2
asTuple, asSeq, asList, asSet, asLisp,
asString, asPlain, asPlain' :: (a -> [Char]) -> [a] -> [Char]
asTuple = printList ("(",",",")")
asSeq = printList ("",",","")
asList = printList ("[",",","]")
asSet = printList ("{",",","}")
asLisp = printList ("("," ",")")
asPlain f xs = if null xs then "" else printList (" "," ","") f xs
asPlain' f xs = if null xs then "" else printList (""," ","") f xs
asString = printList ("","","")
asCases :: Int -> (a -> [Char]) -> [a] -> [Char]
asCases l =
let ind = indent 4 l
in printList ("\n"++ind++" ","\n"++ind++" | ","")
asDefs :: [Char] -> (a -> [Char]) -> [a] -> [Char]
asDefs n = printList ("\n"++n,"\n"++n,"\n")
asParagraphs :: (a -> [Char]) -> [a] -> [Char]
asParagraphs = printList ("\n","\n\n","\n")