BiobaseInfernal-0.6.0.0: Biobase/Infernal/Types.hs
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-- | All these different accession numbers and identifiers are confusing,
-- newtype's to the rescue.
--
-- TODO some of these names might have to change in the future...
--
-- TODO Use INT64 instead of Int...
module Biobase.Infernal.Types where
import Control.Arrow
import Data.ByteString.Char8 as BS
-- * Rfam Clans
-- | Clan accession identifier
newtype ClanAccession = ClanAccession {unClanAccession :: Int}
deriving (Eq,Ord,Read,Show)
-- | Clan model name
newtype ClanIdentification = ClanIdentification {unClanIdentification :: ByteString}
deriving (Eq,Ord,Read,Show)
-- * Covariance models or Stockholm multiple alignments.
-- | The numeric identifier of a covarience model or Stockholm multiple
-- alignment as in RFxxxxx.
newtype ModelAccession = ModelAccession {unModelAccession :: Int}
deriving (Eq,Ord,Read,Show)
-- | String identifier of a covariance model or Stockholm multiple alignment as
-- in "5S_rRNA".
newtype ModelIdentification = ModelIdentification {unModelIdentification :: ByteString}
deriving (Eq,Ord,Read,Show)
-- * Individual sequence information
-- | EMBL sequence accession based on sequence accession and sequence start to
-- stop. (Should this then be RfamSequenceAccession?)
newtype EmblAccession = EmblAccession {unEmblAccession :: (ByteString,Int,Int)}
deriving (Eq,Ord,Read,Show)
-- | Simple function to create 'EmblAccession' from a 'ByteString'.
mkEmblAccession :: ByteString -> EmblAccession
mkEmblAccession s = EmblAccession (sid,start,stop) where
(sid,(Just (start,_),Just (stop,_))) = second ((BS.readInt *** (BS.readInt . BS.drop 1)) . BS.span (/='-') . BS.drop 1) . BS.span (/='/') $ s
-- | Numeric species accession number.
newtype SpeciesAccession = SpeciesAccession {unSpeciesAccession :: Int}
deriving (Eq,Ord,Read,Show)
-- | String name for species.
newtype SpeciesName = SpeciesName {unSpeciesName :: ByteString}
deriving (Eq,Ord,Read,Show)
-- | Strict FASTA data.
newtype StrictSeqData = StrictSeqData {unStrictSeqData :: ByteString}
deriving (Eq,Ord,Read,Show)
-- | Classification names (taxonomic classification)
newtype Classification = Classification {unClassification :: ByteString}
deriving (Eq,Ord,Read,Show)
-- * More generic newtypes, sequence identification, etc
-- | Identifies a certain scaffold or chromosome where a hit occurs
newtype Scaffold = Scaffold {unScaffold :: ByteString}
deriving (Eq,Ord,Read,Show)
-- | Infernal bit score. Behaves like a double (deriving Num).
newtype BitScore = BitScore {unBitScore :: Double}
deriving (Eq,Ord,Read,Show,Num)