shower-0.1: lib/Shower.hs
module Shower
( shower,
showerString
) where
import Data.Bifunctor (bimap)
import Text.Megaparsec (parse, errorBundlePretty, eof)
import Shower.Parser (pShower)
import Shower.Printer (showerRender)
shower :: Show a => a -> String
shower a =
case showerString s of
Left _ -> s
Right s' -> s'
where
s = show a
showerString :: String -> Either String String
showerString s =
bimap errorBundlePretty showerRender (parse (pShower <* eof) "" s)