composite-ekg 0.2.0.0 → 0.3.0.0
raw patch · 2 files changed
+9/−12 lines, 2 filesdep −Framesdep −basic-preludePVP ok
version bump matches the API change (PVP)
Dependencies removed: Frames, basic-prelude
API changes (from Hackage documentation)
- Composite.Ekg: instance (Composite.Ekg.EkgMetric a, Composite.Ekg.EkgMetric (Frames.Rec.Record rs), Composite.Base.NamedField (s Frames.Col.:-> a)) => Composite.Ekg.EkgMetric (Frames.Rec.Record (s Frames.Col.:-> a : rs))
- Composite.Ekg: instance Composite.Ekg.EkgMetric (Frames.Rec.Record '[])
+ Composite.Ekg: instance (Composite.Ekg.EkgMetric a, Composite.Ekg.EkgMetric (Composite.Record.Record rs), GHC.TypeLits.KnownSymbol s) => Composite.Ekg.EkgMetric (Composite.Record.Record (s Composite.Record.:-> a : rs))
+ Composite.Ekg: instance Composite.Ekg.EkgMetric (Composite.Record.Record '[])
Files
- composite-ekg.cabal +2/−4
- src/Composite/Ekg.hs +7/−8
composite-ekg.cabal view
@@ -3,7 +3,7 @@ -- see: https://github.com/sol/hpack name: composite-ekg-version: 0.2.0.0+version: 0.3.0.0 synopsis: EKG Metrics for Vinyl/Frames records description: Integration between EKG and Vinyl/Frames records allowing records holding registered metrics to be easily constructed from a type declaration. category: Records@@ -18,15 +18,13 @@ library hs-source-dirs: src- default-extensions: DataKinds FlexibleContexts FlexibleInstances GeneralizedNewtypeDeriving MultiParamTypeClasses NoImplicitPrelude OverloadedStrings PolyKinds ScopedTypeVariables StandaloneDeriving StrictData TemplateHaskell TupleSections TypeFamilies TypeOperators ViewPatterns+ default-extensions: DataKinds FlexibleContexts FlexibleInstances GeneralizedNewtypeDeriving MultiParamTypeClasses OverloadedStrings PolyKinds ScopedTypeVariables StandaloneDeriving StrictData TemplateHaskell TupleSections TypeFamilies TypeOperators ViewPatterns ghc-options: -Wall -O2 build-depends: base >= 4.7 && < 5- , basic-prelude , composite-base , ekg , ekg-core- , Frames , lens , text , vinyl
src/Composite/Ekg.hs view
@@ -1,14 +1,13 @@ module Composite.Ekg (EkgMetric(ekgMetric)) where -import BasicPrelude-import Composite.Base (NamedField(fieldName))-import Control.Lens (view, _Unwrapped)+import Composite.Record ((:->)(Val), Rec((:&), RNil), Record) import Data.Char (isUpper, toLower)+import Data.Functor.Identity (Identity(Identity))+import Data.Monoid ((<>)) import qualified Data.Text as Text import Data.Proxy (Proxy(Proxy))-import Data.Vinyl.Core (Rec((:&), RNil))-import Data.Vinyl.Functor (Identity(Identity))-import Frames (Record, (:->))+import Data.Text (Text, pack)+import GHC.TypeLits (KnownSymbol, symbolVal) import System.Metrics (Store, createCounter, createGauge, createLabel, createDistribution) import System.Metrics.Counter (Counter) import System.Metrics.Gauge (Gauge)@@ -44,10 +43,10 @@ class EkgMetric a where ekgMetric :: Text -> Store -> IO a -instance forall a s rs. (EkgMetric a, EkgMetric (Record rs), NamedField (s :-> a)) => EkgMetric (Record ((s :-> a) ': rs)) where+instance forall a s rs. (EkgMetric a, EkgMetric (Record rs), KnownSymbol s) => EkgMetric (Record ((s :-> a) ': rs)) where ekgMetric prefix store = (:&)- <$> (Identity . view _Unwrapped <$> ekgMetric (prefix <> "." <> (upperScores . fieldName) (Proxy :: Proxy (s :-> a))) store)+ <$> (Identity . Val <$> ekgMetric (prefix <> "." <> (upperScores . pack . symbolVal) (Proxy :: Proxy s)) store) <*> ekgMetric prefix store instance EkgMetric (Record '[]) where