0 | module Control.Monad.Distribution
3 | import Data.Vect.Quantifiers
4 | import Control.Monad.Identity
18 | data Dist : (i : Nat) -> Type where
20 | MkDist : Vect i Double -> Dist i
23 | toVect : Dist i -> Vect i Double
24 | toVect (MkDist xs) = xs
28 | uniform : {i : Nat} -> (isSucc : IsSucc i) => Dist i
29 | uniform = MkDist (replicate i 0)
33 | diracDelta : {i : Nat} -> IsSucc i =>
34 | (j : Fin i) -> Dist i
35 | diracDelta @{ItIsSucc {n}} j = MkDist $
insertAt j 0 (replicate n minusInfinity)