Description
Utilities for showing string-like things.
README.md
om-show
Haskell utilities for turning values into string representations. It is mainly just a couple of very useful functions that eliminate a lot of conversion to from text types. It's so small that I can just post the entire source code in this README:
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{- | Utilities for showing string-like things. -}
module OM.Show (
showt,
showj,
ShowJ(..),
) where
import Data.Aeson (encode, ToJSON)
import Data.String (IsString, fromString)
import qualified Data.Text.Lazy as TL
import qualified Data.Text.Lazy.Encoding as TLE
{- | Like 'show', but for any string-like thing. -}
showt :: (Show a, IsString b) => a -> b
showt = fromString . show
{- |
Show the JSON representation as any kind of string-like thing.
Primarily useful for dumping JSON values into log messages without having to
jump through too many hoops.
-}
showj :: (ToJSON a, IsString b) => a -> b
showj = fromString . TL.unpack . TLE.decodeUtf8 . encode
{- |
Wrapper whose 'Show' instance outputs JSON.
Especially useful with `-XDerivingVia`
e.g.
> newtype Foo = Foo SomeType
> deriving Show via (ShowJ SomeType)
This will cause @show (foo :: Foo) to output the JSON representation
of SomeType.
-}
newtype ShowJ a = ShowJ a
deriving stock (Eq, Ord)
deriving newtype (ToJSON)
instance (ToJSON a) => Show (ShowJ a) where
show = showj