packages feed

hmm-hmatrix 0.0.2 → 0.1

raw patch · 6 files changed

+27/−31 lines, 6 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

- Math.HiddenMarkovModel: [distribution] :: T distr prob -> distr
- Math.HiddenMarkovModel: [initial] :: T distr prob -> Vector prob
- Math.HiddenMarkovModel: [trainedDistribution] :: Trained distr prob -> distr
- Math.HiddenMarkovModel: [trainedInitial] :: Trained distr prob -> Vector prob
- Math.HiddenMarkovModel: [trainedTransition] :: Trained distr prob -> Matrix prob
- Math.HiddenMarkovModel: [transition] :: T distr prob -> Matrix prob
- Math.HiddenMarkovModel.Distribution: instance (Control.DeepSeq.NFData a, Foreign.Storable.Storable a) => Control.DeepSeq.NFData (Math.HiddenMarkovModel.Distribution.Gaussian a)
- Math.HiddenMarkovModel.Distribution: instance (Control.DeepSeq.NFData a, Foreign.Storable.Storable a) => Control.DeepSeq.NFData (Math.HiddenMarkovModel.Distribution.GaussianTrained a)
- Math.HiddenMarkovModel.Distribution: instance (Control.DeepSeq.NFData prob, Control.DeepSeq.NFData symbol) => Control.DeepSeq.NFData (Math.HiddenMarkovModel.Distribution.Discrete prob symbol)
- Math.HiddenMarkovModel.Distribution: instance (Control.DeepSeq.NFData prob, Control.DeepSeq.NFData symbol) => Control.DeepSeq.NFData (Math.HiddenMarkovModel.Distribution.DiscreteTrained prob symbol)
- Math.HiddenMarkovModel.Distribution: instance (Data.Packed.Internal.Numeric.Container Data.Vector.Storable.Vector prob, Data.Packed.Internal.Numeric.Product prob, GHC.Classes.Ord symbol) => Math.HiddenMarkovModel.Distribution.EmissionProb (Math.HiddenMarkovModel.Distribution.Discrete prob symbol)
- Math.HiddenMarkovModel.Distribution: instance (Data.Packed.Internal.Numeric.Container Data.Vector.Storable.Vector prob, Data.Packed.Internal.Numeric.Product prob, GHC.Classes.Ord symbol) => Math.HiddenMarkovModel.Distribution.Estimate (Math.HiddenMarkovModel.Distribution.DiscreteTrained prob symbol)
- Math.HiddenMarkovModel.Distribution: instance (Data.Packed.Internal.Numeric.Container Data.Vector.Storable.Vector prob, Data.Packed.Internal.Numeric.Product prob, GHC.Classes.Ord symbol) => Math.HiddenMarkovModel.Distribution.Info (Math.HiddenMarkovModel.Distribution.Discrete prob symbol)
- Math.HiddenMarkovModel.Distribution: instance (Data.Packed.Internal.Numeric.Container Data.Vector.Storable.Vector prob, Data.Packed.Internal.Numeric.Product prob, GHC.Classes.Ord symbol, GHC.Classes.Ord prob, System.Random.Random prob) => Math.HiddenMarkovModel.Distribution.Generate (Math.HiddenMarkovModel.Distribution.Discrete prob symbol)
- Math.HiddenMarkovModel.Distribution: instance (Data.Packed.Numeric.Numeric a, Numeric.LinearAlgebra.Algorithms.Field a) => Math.HiddenMarkovModel.Distribution.EmissionProb (Math.HiddenMarkovModel.Distribution.Gaussian a)
- Math.HiddenMarkovModel.Distribution: instance (Data.Packed.Numeric.Numeric a, Numeric.LinearAlgebra.Algorithms.Field a) => Math.HiddenMarkovModel.Distribution.Estimate (Math.HiddenMarkovModel.Distribution.GaussianTrained a)
- Math.HiddenMarkovModel.Distribution: instance (GHC.Show.Show a, Data.Packed.Internal.Matrix.Element a) => GHC.Show.Show (Math.HiddenMarkovModel.Distribution.Gaussian a)
- Math.HiddenMarkovModel.Distribution: instance (GHC.Show.Show a, Data.Packed.Internal.Matrix.Element a) => GHC.Show.Show (Math.HiddenMarkovModel.Distribution.GaussianTrained a)
- Math.HiddenMarkovModel.Distribution: instance (GHC.Show.Show prob, GHC.Show.Show symbol, Foreign.Storable.Storable prob) => GHC.Show.Show (Math.HiddenMarkovModel.Distribution.Discrete prob symbol)
- Math.HiddenMarkovModel.Distribution: instance (GHC.Show.Show prob, GHC.Show.Show symbol, Foreign.Storable.Storable prob) => GHC.Show.Show (Math.HiddenMarkovModel.Distribution.DiscreteTrained prob symbol)
- Math.HiddenMarkovModel.Distribution: instance (Numeric.LinearAlgebra.Algorithms.Field a, GHC.Classes.Eq a, GHC.Show.Show a, GHC.Read.Read a) => Math.HiddenMarkovModel.Distribution.CSV (Math.HiddenMarkovModel.Distribution.Gaussian a)
- Math.HiddenMarkovModel.Distribution: instance (Numeric.LinearAlgebra.Algorithms.Field prob, GHC.Show.Show prob, GHC.Read.Read prob, Math.HiddenMarkovModel.Distribution.CSVSymbol symbol) => Math.HiddenMarkovModel.Distribution.CSV (Math.HiddenMarkovModel.Distribution.Discrete prob symbol)
- Math.HiddenMarkovModel.Distribution: instance Control.DeepSeq.NFData Math.HiddenMarkovModel.Distribution.State
- Math.HiddenMarkovModel.Distribution: instance GHC.Arr.Ix Math.HiddenMarkovModel.Distribution.State
- Math.HiddenMarkovModel.Distribution: instance GHC.Classes.Eq Math.HiddenMarkovModel.Distribution.State
- Math.HiddenMarkovModel.Distribution: instance GHC.Classes.Ord Math.HiddenMarkovModel.Distribution.State
- Math.HiddenMarkovModel.Distribution: instance GHC.Enum.Enum Math.HiddenMarkovModel.Distribution.State
- Math.HiddenMarkovModel.Distribution: instance GHC.Read.Read Math.HiddenMarkovModel.Distribution.State
- Math.HiddenMarkovModel.Distribution: instance GHC.Show.Show Math.HiddenMarkovModel.Distribution.State
- Math.HiddenMarkovModel.Distribution: instance Math.HiddenMarkovModel.Distribution.CSVSymbol GHC.Types.Char
- Math.HiddenMarkovModel.Distribution: instance Math.HiddenMarkovModel.Distribution.CSVSymbol GHC.Types.Int
- Math.HiddenMarkovModel.Distribution: instance Numeric.LinearAlgebra.Algorithms.Field a => Math.HiddenMarkovModel.Distribution.Generate (Math.HiddenMarkovModel.Distribution.Gaussian a)
- Math.HiddenMarkovModel.Distribution: instance Numeric.LinearAlgebra.Algorithms.Field a => Math.HiddenMarkovModel.Distribution.Info (Math.HiddenMarkovModel.Distribution.Gaussian a)
- Math.HiddenMarkovModel.Example.TrafficLight: instance GHC.Classes.Eq Math.HiddenMarkovModel.Example.TrafficLight.Color
- Math.HiddenMarkovModel.Example.TrafficLight: instance GHC.Classes.Ord Math.HiddenMarkovModel.Example.TrafficLight.Color
- Math.HiddenMarkovModel.Example.TrafficLight: instance GHC.Enum.Enum Math.HiddenMarkovModel.Example.TrafficLight.Color
- Math.HiddenMarkovModel.Example.TrafficLight: instance GHC.Read.Read Math.HiddenMarkovModel.Example.TrafficLight.Color
- Math.HiddenMarkovModel.Example.TrafficLight: instance GHC.Show.Show Math.HiddenMarkovModel.Example.TrafficLight.Color
- Math.HiddenMarkovModel.Example.TrafficLight: instance Math.HiddenMarkovModel.Distribution.CSVSymbol Math.HiddenMarkovModel.Example.TrafficLight.Color
- Math.HiddenMarkovModel.Named: [model] :: T distr prob -> T distr prob
- Math.HiddenMarkovModel.Named: [nameFromStateMap] :: T distr prob -> Map State String
- Math.HiddenMarkovModel.Named: [stateFromNameMap] :: T distr prob -> Map String State
- Math.HiddenMarkovModel.Named: instance (Control.DeepSeq.NFData distr, Control.DeepSeq.NFData prob, Foreign.Storable.Storable prob) => Control.DeepSeq.NFData (Math.HiddenMarkovModel.Named.T distr prob)
- Math.HiddenMarkovModel.Named: instance (GHC.Read.Read distr, GHC.Read.Read prob, Data.Packed.Internal.Matrix.Element prob) => GHC.Read.Read (Math.HiddenMarkovModel.Named.T distr prob)
- Math.HiddenMarkovModel.Named: instance (GHC.Show.Show distr, GHC.Show.Show prob, Data.Packed.Internal.Matrix.Element prob) => GHC.Show.Show (Math.HiddenMarkovModel.Named.T distr prob)
- Math.HiddenMarkovModel.Pattern: instance Numeric.LinearAlgebra.Algorithms.Field prob => Data.Semigroup.Semigroup (Math.HiddenMarkovModel.Pattern.T prob)
+ Math.HiddenMarkovModel: distribution :: T distr prob -> distr
+ Math.HiddenMarkovModel: initial :: T distr prob -> Vector prob
+ Math.HiddenMarkovModel: trainedDistribution :: Trained distr prob -> distr
+ Math.HiddenMarkovModel: trainedInitial :: Trained distr prob -> Vector prob
+ Math.HiddenMarkovModel: trainedTransition :: Trained distr prob -> Matrix prob
+ Math.HiddenMarkovModel: transition :: T distr prob -> Matrix prob
+ Math.HiddenMarkovModel.Distribution: instance (Container Vector prob, Product prob, Ord symbol) => EmissionProb (Discrete prob symbol)
+ Math.HiddenMarkovModel.Distribution: instance (Container Vector prob, Product prob, Ord symbol) => Estimate (DiscreteTrained prob symbol) (Discrete prob symbol)
+ Math.HiddenMarkovModel.Distribution: instance (Container Vector prob, Product prob, Ord symbol) => Info (Discrete prob symbol)
+ Math.HiddenMarkovModel.Distribution: instance (Container Vector prob, Product prob, Ord symbol, Ord prob, Random prob) => Generate (Discrete prob symbol)
+ Math.HiddenMarkovModel.Distribution: instance (Field a, Eq a, Show a, Read a) => CSV (Gaussian a)
+ Math.HiddenMarkovModel.Distribution: instance (Field prob, Show prob, Read prob, CSVSymbol symbol) => CSV (Discrete prob symbol)
+ Math.HiddenMarkovModel.Distribution: instance (NFData a, Storable a) => NFData (Gaussian a)
+ Math.HiddenMarkovModel.Distribution: instance (NFData a, Storable a) => NFData (GaussianTrained a)
+ Math.HiddenMarkovModel.Distribution: instance (NFData prob, NFData symbol) => NFData (Discrete prob symbol)
+ Math.HiddenMarkovModel.Distribution: instance (NFData prob, NFData symbol) => NFData (DiscreteTrained prob symbol)
+ Math.HiddenMarkovModel.Distribution: instance (Numeric a, Field a) => EmissionProb (Gaussian a)
+ Math.HiddenMarkovModel.Distribution: instance (Numeric a, Field a) => Estimate (GaussianTrained a) (Gaussian a)
+ Math.HiddenMarkovModel.Distribution: instance (Show a, Element a) => Show (Gaussian a)
+ Math.HiddenMarkovModel.Distribution: instance (Show a, Element a) => Show (GaussianTrained a)
+ Math.HiddenMarkovModel.Distribution: instance (Show prob, Show symbol, Storable prob) => Show (Discrete prob symbol)
+ Math.HiddenMarkovModel.Distribution: instance (Show prob, Show symbol, Storable prob) => Show (DiscreteTrained prob symbol)
+ Math.HiddenMarkovModel.Distribution: instance CSVSymbol Char
+ Math.HiddenMarkovModel.Distribution: instance CSVSymbol Int
+ Math.HiddenMarkovModel.Distribution: instance Enum State
+ Math.HiddenMarkovModel.Distribution: instance Eq State
+ Math.HiddenMarkovModel.Distribution: instance Field a => Generate (Gaussian a)
+ Math.HiddenMarkovModel.Distribution: instance Field a => Info (Gaussian a)
+ Math.HiddenMarkovModel.Distribution: instance Ix State
+ Math.HiddenMarkovModel.Distribution: instance NFData State
+ Math.HiddenMarkovModel.Distribution: instance Ord State
+ Math.HiddenMarkovModel.Distribution: instance Read State
+ Math.HiddenMarkovModel.Distribution: instance Show State
+ Math.HiddenMarkovModel.Example.TrafficLight: instance CSVSymbol Color
+ Math.HiddenMarkovModel.Example.TrafficLight: instance Enum Color
+ Math.HiddenMarkovModel.Example.TrafficLight: instance Eq Color
+ Math.HiddenMarkovModel.Example.TrafficLight: instance Ord Color
+ Math.HiddenMarkovModel.Example.TrafficLight: instance Read Color
+ Math.HiddenMarkovModel.Example.TrafficLight: instance Show Color
+ Math.HiddenMarkovModel.Named: instance (NFData distr, NFData prob, Storable prob) => NFData (T distr prob)
+ Math.HiddenMarkovModel.Named: instance (Read distr, Read prob, Element prob) => Read (T distr prob)
+ Math.HiddenMarkovModel.Named: instance (Show distr, Show prob, Element prob) => Show (T distr prob)
+ Math.HiddenMarkovModel.Named: model :: T distr prob -> T distr prob
+ Math.HiddenMarkovModel.Named: nameFromStateMap :: T distr prob -> Map State String
+ Math.HiddenMarkovModel.Named: stateFromNameMap :: T distr prob -> Map String State
+ Math.HiddenMarkovModel.Pattern: instance Field prob => Semigroup (T prob)
- Math.HiddenMarkovModel: finishTraining :: (Estimate tdistr, Distribution tdistr ~ distr, Trained distr ~ tdistr, Probability distr ~ prob) => Trained tdistr prob -> T distr prob
+ Math.HiddenMarkovModel: finishTraining :: (Estimate tdistr distr, Probability distr ~ prob) => Trained tdistr prob -> T distr prob
- Math.HiddenMarkovModel: mergeTrained :: (Estimate tdistr, Distribution tdistr ~ distr, Trained distr ~ tdistr, Probability distr ~ prob) => Trained tdistr prob -> Trained tdistr prob -> Trained tdistr prob
+ Math.HiddenMarkovModel: mergeTrained :: (Estimate tdistr distr, Probability distr ~ prob) => Trained tdistr prob -> Trained tdistr prob -> Trained tdistr prob
- Math.HiddenMarkovModel: trainMany :: (Estimate tdistr, Distribution tdistr ~ distr, Trained distr ~ tdistr, Probability distr ~ prob, Foldable f) => (trainingData -> Trained tdistr prob) -> T f trainingData -> T distr prob
+ Math.HiddenMarkovModel: trainMany :: (Estimate tdistr distr, Probability distr ~ prob, Foldable f) => (trainingData -> Trained tdistr prob) -> T f trainingData -> T distr prob
- Math.HiddenMarkovModel: trainSupervised :: (Estimate tdistr, Distribution tdistr ~ distr, Trained distr ~ tdistr, Probability distr ~ prob, Emission distr ~ emission) => Int -> T [] (State, emission) -> Trained tdistr prob
+ Math.HiddenMarkovModel: trainSupervised :: (Estimate tdistr distr, Probability distr ~ prob, Emission distr ~ emission) => Int -> T [] (State, emission) -> Trained tdistr prob
- Math.HiddenMarkovModel: trainUnsupervised :: (Estimate tdistr, Distribution tdistr ~ distr, Trained distr ~ tdistr, Probability distr ~ prob, Emission distr ~ emission) => T distr prob -> T [] emission -> Trained tdistr prob
+ Math.HiddenMarkovModel: trainUnsupervised :: (Estimate tdistr distr, Probability distr ~ prob, Emission distr ~ emission) => T distr prob -> T [] emission -> Trained tdistr prob
- Math.HiddenMarkovModel.Distribution: accumulateEmissions :: (Estimate tdistr, Distribution tdistr ~ distr, Probability distr ~ prob) => [[(Emission distr, prob)]] -> tdistr
+ Math.HiddenMarkovModel.Distribution: accumulateEmissions :: (Estimate tdistr distr, Probability distr ~ prob) => [[(Emission distr, prob)]] -> tdistr
- Math.HiddenMarkovModel.Distribution: class (Ord symbol) => CSVSymbol symbol
+ Math.HiddenMarkovModel.Distribution: class Ord symbol => CSVSymbol symbol
- Math.HiddenMarkovModel.Distribution: class (EmissionProb (Distribution tdistr), Trained (Distribution tdistr) ~ tdistr) => Estimate tdistr where type family Distribution tdistr
+ Math.HiddenMarkovModel.Distribution: class (Distribution tdistr ~ distr, Trained distr ~ tdistr, EmissionProb distr) => Estimate tdistr distr where type family Distribution tdistr type family Trained distr
- Math.HiddenMarkovModel.Distribution: combine :: Estimate tdistr => tdistr -> tdistr -> tdistr
+ Math.HiddenMarkovModel.Distribution: combine :: Estimate tdistr distr => tdistr -> tdistr -> tdistr
- Math.HiddenMarkovModel.Distribution: gaussian :: (Field prob) => [(Vector prob, Matrix prob)] -> Gaussian prob
+ Math.HiddenMarkovModel.Distribution: gaussian :: Field prob => [(Vector prob, Matrix prob)] -> Gaussian prob
- Math.HiddenMarkovModel.Distribution: normalize :: (Estimate tdistr, Distribution tdistr ~ distr) => tdistr -> distr
+ Math.HiddenMarkovModel.Distribution: normalize :: Estimate tdistr distr => tdistr -> distr
- Math.HiddenMarkovModel.Pattern: append :: (Container Vector prob) => T prob -> T prob -> T prob
+ Math.HiddenMarkovModel.Pattern: append :: Container Vector prob => T prob -> T prob -> T prob
- Math.HiddenMarkovModel.Pattern: atom :: (Container Vector prob) => State -> T prob
+ Math.HiddenMarkovModel.Pattern: atom :: Container Vector prob => State -> T prob
- Math.HiddenMarkovModel.Pattern: finish :: (Container Vector prob) => Int -> tdistr -> T prob -> Trained tdistr prob
+ Math.HiddenMarkovModel.Pattern: finish :: Container Vector prob => Int -> tdistr -> T prob -> Trained tdistr prob
- Math.HiddenMarkovModel.Pattern: replicate :: (Container Vector prob) => Int -> T prob -> T prob
+ Math.HiddenMarkovModel.Pattern: replicate :: Container Vector prob => Int -> T prob -> T prob

Files

+ Changes.md view
@@ -0,0 +1,3 @@+## 0.1++* `Distribution.Estimate` turned into a multi-parameter type class.
hmm-hmatrix.cabal view
@@ -1,5 +1,5 @@ Name:                hmm-hmatrix-Version:             0.0.2+Version:             0.1 Synopsis:            Hidden Markov Models using HMatrix primitives Description:   Hidden Markov Models implemented using HMatrix data types and operations.@@ -37,9 +37,11 @@ Category:            Math Build-Type:          Simple Cabal-Version:       >=1.10+Extra-Source-Files:+  Changes.md  Source-Repository this-  Tag:         0.0.2+  Tag:         0.1   Type:        darcs   Location:    http://hub.darcs.net/thielema/hmm-hmatrix 
src/Math/HiddenMarkovModel.hs view
@@ -116,8 +116,7 @@ Contribute a manually labeled emission sequence to a HMM training. -} trainSupervised ::-   (Distr.Estimate tdistr, Distr.Distribution tdistr ~ distr,-    Distr.Trained distr ~ tdistr,+   (Distr.Estimate tdistr distr,     Distr.Probability distr ~ prob, Distr.Emission distr ~ emission) =>    Int -> NonEmpty.T [] (State, emission) -> Trained tdistr prob trainSupervised n xs =@@ -133,8 +132,7 @@        }  finishTraining ::-   (Distr.Estimate tdistr, Distr.Distribution tdistr ~ distr,-    Distr.Trained distr ~ tdistr, Distr.Probability distr ~ prob) =>+   (Distr.Estimate tdistr distr, Distr.Probability distr ~ prob) =>    Trained tdistr prob -> T distr prob finishTraining hmm =    Cons {@@ -146,8 +144,7 @@    }  trainMany ::-   (Distr.Estimate tdistr, Distr.Distribution tdistr ~ distr,-    Distr.Trained distr ~ tdistr, Distr.Probability distr ~ prob,+   (Distr.Estimate tdistr distr, Distr.Probability distr ~ prob,     Foldable f) =>    (trainingData -> Trained tdistr prob) ->    NonEmpty.T f trainingData -> T distr prob
src/Math/HiddenMarkovModel/Distribution.hs view
@@ -1,8 +1,9 @@ {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE MultiParamTypeClasses #-} module Math.HiddenMarkovModel.Distribution (    State(..),-   Emission, Probability, Trained,+   Emission, Probability,    Info(..), Generate(..), EmissionProb(..), Estimate(..),     Discrete(..), DiscreteTrained(..),@@ -62,7 +63,6 @@  type family Probability distr type family Emission distr-type family Trained distr   class@@ -89,16 +89,15 @@    emissionStateProb distr e (State s) = NC.atIndex (emissionProb distr e) s  class-   (EmissionProb (Distribution tdistr),-    Trained (Distribution tdistr) ~ tdistr) =>-      Estimate tdistr where+   (Distribution tdistr ~ distr, Trained distr ~ tdistr, EmissionProb distr) =>+      Estimate tdistr distr where    type Distribution tdistr+   type Trained distr    accumulateEmissions ::-      (Distribution tdistr ~ distr, Probability distr ~ prob) =>-      [[(Emission distr, prob)]] -> tdistr+      (Probability distr ~ prob) => [[(Emission distr, prob)]] -> tdistr    -- could as well be in Semigroup class    combine :: tdistr -> tdistr -> tdistr-   normalize :: (Distribution tdistr ~ distr) => tdistr -> distr+   normalize :: tdistr -> distr   @@ -111,9 +110,7 @@ type instance Probability (Discrete prob symbol) = prob type instance Emission (Discrete prob symbol) = symbol -type instance Trained (Discrete prob symbol) = DiscreteTrained prob symbol - instance (NFData prob, NFData symbol) => NFData (Discrete prob symbol) where    rnf (Discrete m) = rnf m @@ -142,8 +139,9 @@  instance    (NC.Container Vector prob, NC.Product prob, Ord symbol) =>-      Estimate (DiscreteTrained prob symbol) where+      Estimate (DiscreteTrained prob symbol) (Discrete prob symbol) where    type Distribution (DiscreteTrained prob symbol) = Discrete prob symbol+   type Trained (Discrete prob symbol) = DiscreteTrained prob symbol    accumulateEmissions grouped =       let set = Set.toAscList $ foldMap (Set.fromList . map fst) grouped           emi = Map.fromAscList $ zip set [0..]@@ -178,9 +176,7 @@ type instance Probability (Gaussian a) = a type instance Emission (Gaussian a) = Vector a -type instance Trained (Gaussian a) = GaussianTrained a - instance (NFData a, Storable a) => NFData (Gaussian a) where    rnf (Gaussian params) = rnf params @@ -216,8 +212,11 @@          in  c * exp ((-1/2) * NC.dot x0 (cholSolve covarianceChol x0))  -instance (HMatrix.Numeric a, Algo.Field a) => Estimate (GaussianTrained a) where+instance+   (HMatrix.Numeric a, Algo.Field a) =>+      Estimate (GaussianTrained a) (Gaussian a) where    type Distribution (GaussianTrained a) = Gaussian a+   type Trained (Gaussian a) = GaussianTrained a    accumulateEmissions =       let params xs =              let center =
src/Math/HiddenMarkovModel/Normalized.hs view
@@ -151,8 +151,7 @@ This is done by the Baum-Welch algorithm. -} trainUnsupervised ::-   (Distr.Estimate tdistr, Distr.Distribution tdistr ~ distr,-    Distr.Trained distr ~ tdistr,+   (Distr.Estimate tdistr distr,     Distr.Probability distr ~ prob, Distr.Emission distr ~ emission) =>    T distr prob -> NonEmpty.T [] emission -> Trained tdistr prob trainUnsupervised hmm xs =
src/Math/HiddenMarkovModel/Private.hs view
@@ -231,14 +231,12 @@    T distr e -> [Matrix e] -> Matrix e sumTransitions hmm =    List.foldl' NC.add (NC.konst 0 $ LinAlg.size $ transition hmm)---    zero = uncurry LinAlg.zeros $ LinAlg.size $ transition hmm  {- | Baum-Welch algorithm -} trainUnsupervised ::-   (Distr.Estimate tdistr, Distr.Distribution tdistr ~ distr,-    Distr.Trained distr ~ tdistr,+   (Distr.Estimate tdistr distr,     Distr.Probability distr ~ prob, Distr.Emission distr ~ emission) =>    T distr prob -> NonEmpty.T [] emission -> Trained tdistr prob trainUnsupervised hmm xs =@@ -257,8 +255,7 @@   mergeTrained ::-   (Distr.Estimate tdistr, Distr.Distribution tdistr ~ distr,-    Distr.Trained distr ~ tdistr, Distr.Probability distr ~ prob) =>+   (Distr.Estimate tdistr distr, Distr.Probability distr ~ prob) =>    Trained tdistr prob -> Trained tdistr prob -> Trained tdistr prob mergeTrained hmm0 hmm1 =    Trained {@@ -271,8 +268,7 @@    }  instance-   (Distr.Estimate tdistr, Distr.Distribution tdistr ~ distr,-    Distr.Probability distr ~ prob) =>+   (Distr.Estimate tdistr distr, Distr.Probability distr ~ prob) =>       Sg.Semigroup (Trained tdistr prob) where    (<>) = mergeTrained