packages feed

hs-samtools-0.10.0.0: src/Data/BAM/Version1_6/BAM.hs

{-# LANGUAGE DeriveDataTypeable    #-}
{-# LANGUAGE DeriveGeneric         #-}
{-# LANGUAGE FlexibleContexts      #-}
{-# LANGUAGE FlexibleInstances     #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings     #-}
{-# LANGUAGE StrictData            #-}
{-# LANGUAGE TypeFamilies          #-}

-- |
-- Module      :  Data.BAM.Version1_6.BAM
-- Copyright   :  (c) Matthew Mosior 2024
-- License     :  BSD-style
-- Maintainer  :  mattm.github@gmail.com
-- Portability :  portable
--
-- = Description
--
-- This library enables the decoding/encoding of SAM, BAM and CRAM file formats.

module Data.BAM.Version1_6.BAM ( -- * BAM_V1_6_BAM version 1.6 data type
                                 BAM_V1_6_BAM(..)
                               ) where

import Data.BAM.Version1_6.BAM.BAMHeader
import Data.BAM.Version1_6.BAM.BAMAlignments

import Data.Data
import Generics.Deriving.Base

-- | Custom @"BAM_V1_6_BAM"@ (BAM version 1.6) data type.
--
-- See the [SAM v1.6](http://samtools.github.io/hts-specs/SAMv1.pdf) specification documentation.
data BAM_V1_6_BAM = BAM_V1_6_BAM
  { bam_v1_6_bam_bamheader          :: Maybe BAM_V1_6_BAM_BAMHeader
  , bam_v1_6_bam_bamalignments      :: Maybe BAM_V1_6_BAM_BAMAlignments
  , bam_v1_6_bam_endoffilemarker    :: Bool
  } deriving (Generic,Typeable)

instance Eq BAM_V1_6_BAM where
  BAM_V1_6_BAM bam_v1_6_bam_bamheader1
               bam_v1_6_bam_bamalignments1
               bam_v1_6_bam_endoffilemarker1 ==
    BAM_V1_6_BAM bam_v1_6_bam_bamheader2
                 bam_v1_6_bam_bamalignments2
                 bam_v1_6_bam_endoffilemarker2 =
      bam_v1_6_bam_bamheader1          == bam_v1_6_bam_bamheader2     &&
      bam_v1_6_bam_bamalignments1      == bam_v1_6_bam_bamalignments2 &&
      bam_v1_6_bam_endoffilemarker1    == bam_v1_6_bam_endoffilemarker2

instance Show BAM_V1_6_BAM where
  show (BAM_V1_6_BAM header
                     alignments
                     endoffilemarker
       ) =
    "BAM_V1_6_BAM { "                       ++
    "bam_v1_6_bam_bamheader = "             ++
    (show header)                           ++
    " , bam_v1_6_bam_alignments = "         ++
    (show alignments)                       ++
    " , bam_v1_6_bam_endoffilemarker = "    ++
    (show endoffilemarker)                  ++
    " }"