-- | -- Module : Text.Megaparsec.ShowToken -- Copyright : © 2015 Megaparsec contributors -- License : BSD3 -- -- Maintainer : Mark Karpov -- Stability : experimental -- Portability : portable -- -- Pretty printing function and instances for use in error messages. module Text.Megaparsec.ShowToken (ShowToken (..)) where -- | Typeclass 'ShowToken' defines single function 'showToken' that can be -- used to “pretty-print” various tokens. By default, all commonly used -- instances are defined, but you can add your own, of course. class Show a => ShowToken a where -- | Pretty-print given token. This is used to get token representation -- for use in error messages. showToken :: a -> String instance ShowToken Char where showToken = prettyChar -- | @prettyChar ch@ returns user-friendly string representation of given -- character @ch@, suitable for using in error messages, for example. prettyChar :: Char -> String prettyChar '\0' = "null" prettyChar '\a' = "bell" prettyChar '\b' = "backspace" prettyChar '\t' = "tab" prettyChar '\n' = "newline" prettyChar '\v' = "vertical tab" prettyChar '\f' = "form feed" prettyChar '\r' = "carriage return" prettyChar ' ' = "space" prettyChar x = "'" ++ [x] ++ "'" instance ShowToken String where showToken = prettyString -- | @prettyString s@ returns pretty representation of string @s@. This is -- used when printing string tokens in error messages. prettyString :: String -> String prettyString "" = "" prettyString [x] = prettyChar x prettyString "\r\n" = "crlf newline" prettyString xs = "\"" ++ xs ++ "\""