{-# LANGUAGE OverloadedStrings #-}
module Mcmc.Item
( Item (..),
)
where
import Data.Aeson
import Data.Aeson.Types
import Numeric.Log
data Item a = Item
{
state :: a,
prior :: Log Double,
likelihood :: Log Double
}
deriving (Eq, Ord, Show, Read)
instance ToJSON a => ToJSON (Item a) where
toJSON (Item x (Exp p) (Exp l)) = object ["s" .= x, "p" .= p, "l" .= l]
toEncoding (Item x (Exp p) (Exp l)) = pairs ("s" .= x <> "p" .= p <> "l" .= l)
item :: FromJSON a => Object -> Parser (Item a)
item v = do
s <- v .: "s"
p <- v .: "p"
l <- v .: "l"
return $ Item s (Exp p) (Exp l)
instance FromJSON a => FromJSON (Item a) where
parseJSON = withObject "Item" item