{-# LANGUAGE TypeSynonymInstances, TypeSynonymInstances, TypeFamilies, FlexibleInstances, GeneralizedNewtypeDeriving, UndecidableInstances, TemplateHaskell, MultiParamTypeClasses, BangPatterns, StandaloneDeriving #-} module NLP.Probability.Chain (simpleObserve, JointModel (..) -- M2(..), M3(..), M4(..), M5(..), M7(..), HolderPretty, holderPretty, hPretty ) where import NLP.Probability.ConditionalDistribution import NLP.Probability.Distribution import NLP.Probability.Observation import qualified Data.Map as M class JointModel a where data FullEvent a data FullContext a data Probs a data Observation a data Pairs a chainRule :: FullEvent a -> FullContext a -> Pairs a observe :: Pairs a -> Observation a prob :: Probs a -> Pairs a -> Prob estimate :: Observation a -> Probs a class Estimate a where type Dist a instance Event String where type EventMap String = M.Map instance Event Int where type EventMap Int = M.Map simpleObserve a b = observe $ chainRule a b