################################################################################

"""
Keep track of scores & indexes

# Fields
    score::Float64: score
    index::Int64: index

See also: [`HMM`](@ref), [`HMMParams`](@ref)
"""
struct ScorePair
  score::Float64
  index::Int64
end

"""
Hidden Markov model object

# Fields
    dataM::Array: hold data
    tbM::Array: collect traceback

See also: [`HMMParams`](@ref), [`setup!`](@ref),
"""
mutable struct HMM
  dataM::Array
  tbM::Array
end

"""
Hidden Markov model parameters

# Fields
    pen::Float64: penalty for hidden Markov model
    distance::Function: function used to calculate distance

See also: [`HMM`](@ref), [`setup!`](@ref),
"""
@with_kw struct HMMParams
  pen::Float64                 = 200.      # penalty
  distance::Function           = distance  # distance function
end

################################################################################
