Ticket #4303: Fisher.hs

File Fisher.hs, 0.9 KB (added by jwlato, 2 years ago)

Fisher.hs file, with type annotation required for ghc7

Line 
1module Fisher (
2    fromMessages
3    ) where
4
5import Control.Monad.ST( unsafeIOToST )
6import Debug.Trace( putTraceMsg )
7
8import Numeric.LinearAlgebra
9
10import History( History )
11import Model( Model )
12import Types
13
14import qualified Model as Model
15import qualified Vars as Vars
16import qualified GHC.ST
17
18       
19fromMessages :: Model -> [(Message, History)] -> Herm Matrix Double
20fromMessages m mhs0 = runHermMatrix $ do
21    f <- newMatrix (p,p) 0
22    go 0 f mhs0
23  where
24    p = Vars.dim $ Model.vars m
25   
26    go :: Integer -> STMatrix s Double -> [(Message,History)] -> GHC.ST.ST s (Herm (STMatrix s) Double)
27    go n f [] = return $ Herm defaultCovUplo f
28    go n f ((msg,h):mhs) = let
29        (Herm _ f') = Model.covVars m h (messageFrom msg)
30        l = fromIntegral $ length $ messageTo msg
31        in do
32            unsafeIOToST $ putTraceMsg $ show n
33            addToMatrixWithScales 1 f l f' f
34            go (n+1) f mhs