-- | The Backtraced column structure is for codon-based alignments, including
-- special cases.

module DP.Backtraced.Codon where

import Data.ByteString (ByteString)
import Data.Vector (Vector)
import GHC.Generics (Generic)

import Biobase.Types.Codon



-- | A single 'Backtraced' column. Since such a column will be part of a
-- @Backtraced (Z:.BtCodon c aa:. ...)@ structure, it is always possible to
-- extend even further, by having more entries.

data BtCodon c aa
  -- | A canonical match. A codon and the translated amino acid need to be set.
  = Match
    { _codon   !(Codon c)
    , _aa      !aa
    }
  -- | A frameshifting match. The vector of frameshifted nucleotides will have
  -- a number of characters @c@, that encode for a single amino acid.
  | Frameshift
    { _frameshift  !(Vector c)
    , _aa          !aa
    }
  | Insert
    { _codon   !(Codon c)
    , _aa      !aa
    }
  | Shifted
    { _frameshift  !(Vector c)
    , _aa          !aa
    }
  | Region
    { _region      !(Vector c)
    , _annotation  !ByteString
    }
  | Delete
    {
    }