-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | A bioinformatics library
--   
--   A set of core definitions and data structures commonly used in
--   bioinformatics. The intention is that bioinformatics libraries will
--   use this as a common ground to avoid needless incompatibilities and
--   duplicated work.
@package biocore
@version 0.3.1


-- | This module defines common data structures for biosequences, i.e. data
--   that represents nucleotide or protein sequences.
--   
--   Basically, anything resembling or wrapping a sequence should implement
--   the <a>BioSeq</a> class (and <a>BioSeqQual</a> if quality information
--   is available).
--   
--   The data types are mostly wrappers from lazy bytestrings from
--   <a>Lazy</a> and <a>Char8</a>, but most users of this module should not
--   need to access the underlying data types directly.
module Bio.Core.Sequence

-- | A quality value is in the range 0..255.
newtype Qual
Qual :: Word8 -> Qual
[unQual] :: Qual -> Word8

-- | An <a>Offset</a> is a zero-based index into a sequence
newtype Offset
Offset :: Int64 -> Offset
[unOff] :: Offset -> Int64

-- | Sequence data are lazy bytestrings of ASCII characters.
newtype SeqData
SeqData :: ByteString -> SeqData
[unSD] :: SeqData -> ByteString

-- | Sequence data are lazy bytestrings of ASCII characters.
newtype SeqLabel
SeqLabel :: ByteString -> SeqLabel
[unSL] :: SeqLabel -> ByteString

-- | Quality data are lazy bytestrings of <a>Qual</a>s.
newtype QualData
QualData :: ByteString -> QualData
[unQD] :: QualData -> ByteString

-- | The <a>BioSeq</a> class models sequence data, and any data object that
--   represents a biological sequence should implement it.
class BioSeq s
seqid :: BioSeq s => s -> SeqLabel
seqheader :: BioSeq s => s -> SeqLabel
seqdata :: BioSeq s => s -> SeqData
seqlength :: BioSeq s => s -> Offset

-- | <i>Deprecated: Warning: <a>seqlabel</a> is deprecated, use
--   <a>seqid</a> or <a>seqheader</a> instead.</i>
seqlabel :: BioSeq s => s -> SeqLabel

-- | The BioSeqQual class extends <a>BioSeq</a> with quality data. Any
--   correspondig data object should be an instance, this will allow Fasta
--   formatted quality data <a>toFastaQual</a>, as well as the combined
--   FastQ format (via <a>toFastQ</a>).
class BioSeq sq => BioSeqQual sq
seqqual :: BioSeqQual sq => sq -> QualData

-- | Any <a>BioSeq</a> can be formatted as Fasta, 60-char lines.
toFasta :: BioSeq s => s -> ByteString

-- | Output Fasta-formatted quality data (.qual files), where quality
--   values are output as whitespace-separated integers.
toFastaQual :: BioSeqQual s => s -> ByteString

-- | Output FastQ-formatted data. For simplicity, only the Sanger quality
--   format is supported, and only four lines per sequence (i.e. no line
--   breaks in sequence or quality data).
toFastQ :: BioSeqQual s => s -> ByteString
instance GHC.Real.Integral Bio.Core.Sequence.Offset
instance GHC.Real.Real Bio.Core.Sequence.Offset
instance GHC.Enum.Enum Bio.Core.Sequence.Offset
instance GHC.Num.Num Bio.Core.Sequence.Offset
instance GHC.Classes.Ord Bio.Core.Sequence.Offset
instance GHC.Classes.Eq Bio.Core.Sequence.Offset
instance GHC.Show.Show Bio.Core.Sequence.Offset
instance Data.Stringable.Stringable Bio.Core.Sequence.QualData
instance GHC.Show.Show Bio.Core.Sequence.QualData
instance GHC.Classes.Ord Bio.Core.Sequence.QualData
instance GHC.Classes.Eq Bio.Core.Sequence.QualData
instance GHC.Real.Integral Bio.Core.Sequence.Qual
instance GHC.Real.Real Bio.Core.Sequence.Qual
instance GHC.Enum.Enum Bio.Core.Sequence.Qual
instance GHC.Num.Num Bio.Core.Sequence.Qual
instance GHC.Classes.Ord Bio.Core.Sequence.Qual
instance GHC.Classes.Eq Bio.Core.Sequence.Qual
instance GHC.Show.Show Bio.Core.Sequence.Qual
instance Data.Stringable.Stringable Bio.Core.Sequence.SeqLabel
instance GHC.Show.Show Bio.Core.Sequence.SeqLabel
instance Data.String.IsString Bio.Core.Sequence.SeqLabel
instance GHC.Classes.Ord Bio.Core.Sequence.SeqLabel
instance GHC.Classes.Eq Bio.Core.Sequence.SeqLabel
instance Data.Stringable.Stringable Bio.Core.Sequence.SeqData
instance GHC.Show.Show Bio.Core.Sequence.SeqData
instance Data.String.IsString Bio.Core.Sequence.SeqData
instance GHC.Classes.Ord Bio.Core.Sequence.SeqData
instance GHC.Classes.Eq Bio.Core.Sequence.SeqData
instance GHC.Base.Monoid Bio.Core.Sequence.QualData
instance GHC.Base.Monoid Bio.Core.Sequence.SeqLabel
instance GHC.Base.Monoid Bio.Core.Sequence.SeqData


-- | Define common data types for features of sequences
module Bio.Core.Strand

-- | A <a>Strand</a> is either plus (forward) or minus (reverse or
--   reverse-complement)
data Strand
Plus :: Strand
Minus :: Strand
instance GHC.Show.Show Bio.Core.Strand.Strand
instance GHC.Read.Read Bio.Core.Strand.Strand
instance GHC.Classes.Ord Bio.Core.Strand.Strand
instance GHC.Classes.Eq Bio.Core.Strand.Strand


-- | Re-exporting everything from sub-modules for simplicity
module Bio.Core
