monadlog-0.1.1.1: Control/Monad/Log/Label.hs
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE CPP #-}
module Control.Monad.Log.Label where
import Control.Monad.Log
#if !(MIN_VERSION_base(4,8,0))
import Control.Applicative
#endif
import Data.Aeson
import Data.Text (Text)
-- | Simple 'Label' environment for labelled logging.
--
-- @
-- showt (Label "foo") = "foo"
-- toJSON (Label "foo") = "foo"
-- @
data Label = Label Text deriving (Show, Eq, Ord)
instance TextShow Label where
showb (Label t) = fromText t
instance ToJSON Label where
toJSON (Label t) = toJSON t
#if MIN_VERSION_aeson(0,10,0)
toEncoding (Label t) = toEncoding t
#endif
instance FromJSON Label where
parseJSON t = Label <$> parseJSON t
-- | 'withEnv' specialized for 'Label'
withLabel :: (MonadLog Label m) => Label -> m a -> m a
withLabel = withEnv