{-# LANGUAGE RankNTypes #-}
module Mcmc.Monitor.Parameter
(
MonitorParameter (..),
(@.),
monitorInt,
monitorRealFloat,
monitorRealFloatF,
monitorRealFloatS,
)
where
import Data.Text.Lazy.Builder (Builder)
import qualified Data.Text.Lazy.Builder.Int as T
import qualified Data.Text.Lazy.Builder.RealFloat as T
import Lens.Micro
data MonitorParameter a
= MonitorParameter
{
mpName :: String,
mpFunc :: a -> Builder
}
(@.) :: Lens' b a -> MonitorParameter a -> MonitorParameter b
(@.) l (MonitorParameter n f) = MonitorParameter n (\x -> f $ x^.l)
monitorInt ::
Integral a =>
String ->
MonitorParameter a
monitorInt n = MonitorParameter n T.decimal
{-# SPECIALIZE monitorInt :: String -> MonitorParameter Int #-}
monitorRealFloat ::
RealFloat a =>
String ->
MonitorParameter a
monitorRealFloat n = MonitorParameter n (T.formatRealFloat T.Fixed (Just 8))
{-# SPECIALIZE monitorRealFloat :: String -> MonitorParameter Double #-}
monitorRealFloatF ::
RealFloat a =>
String ->
MonitorParameter a
monitorRealFloatF n = MonitorParameter n T.realFloat
{-# SPECIALIZE monitorRealFloatF :: String -> MonitorParameter Double #-}
monitorRealFloatS ::
RealFloat a =>
String ->
MonitorParameter a
monitorRealFloatS n = MonitorParameter n (T.formatRealFloat T.Exponent (Just 8))
{-# SPECIALIZE monitorRealFloatS :: String -> MonitorParameter Double #-}