packages feed

hs-samtools-0.10.0.0: src/Data/SAM/Version1_6/Alignment/OptionalFields/Base.hs

{-# LANGUAGE DeriveDataTypeable          #-}
{-# LANGUAGE DeriveGeneric               #-}
{-# LANGUAGE FlexibleContexts            #-}
{-# LANGUAGE FlexibleInstances           #-}
{-# LANGUAGE MultiParamTypeClasses       #-}
{-# LANGUAGE OverloadedStrings           #-}
{-# LANGUAGE StrictData                  #-}
{-# LANGUAGE TypeFamilies                #-}
{-# OPTIONS_GHC -fno-warn-name-shadowing #-}

-- |
-- Module      :  Data.SAM.Version1_6.Alignment.OptionalFields.Base
-- 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.SAM.Version1_6.Alignment.OptionalFields.Base ( -- * SAM version 1.6 alignment optional data types
                                                           SAM_V1_6_Alignment_OptionalFields(..)
                                                         ) where

import Data.SAM.Version1_6.Alignment.OptionalFields.AOPT
import Data.SAM.Version1_6.Alignment.OptionalFields.IOPT
import Data.SAM.Version1_6.Alignment.OptionalFields.FOPT
import Data.SAM.Version1_6.Alignment.OptionalFields.ZOPT
import Data.SAM.Version1_6.Alignment.OptionalFields.HOPT
import Data.SAM.Version1_6.Alignment.OptionalFields.BOPT

import Data.Data
import Generics.Deriving.Base

-- | Custom SAM (version 1.6) @"SAM_V1_6_Alignment_OptionalFields"@ data type.
--
-- See section 1.4 and 1.5 of the [SAM v1.6](http://samtools.github.io/hts-specs/SAMv1.pdf) specification documentation.
data SAM_V1_6_Alignment_OptionalFields = SAM_V1_6_Alignment_OptionalFields
  { sam_v1_6_alignment_optionalfields_aopt  :: Maybe SAM_V1_6_Alignment_OptionalFields_AOPT -- ^ A - [!-~] - Printable characters.
  , sam_v1_6_alignment_optionalfields_iopt  :: Maybe SAM_V1_6_Alignment_OptionalFields_IOPT -- ^ i - [-+]?[0-9]+ - Signed integer.
  , sam_v1_6_alignment_optionalfields_fopt  :: Maybe SAM_V1_6_Alignment_OptionalFields_FOPT -- ^ f - [-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)? - Single-precision floating number.
  , sam_v1_6_alignment_optionalfields_zopt  :: Maybe SAM_V1_6_Alignment_OptionalFields_ZOPT -- ^ Z - [ !-~]* - Printable string, including space.
  , sam_v1_6_alignment_optionalfields_hopt  :: Maybe SAM_V1_6_Alignment_OptionalFields_HOPT -- ^ H - ([0-9A-F][0-9A-F])* - Byte array in the Hex format.
  , sam_v1_6_alignment_optionalfields_bopt  :: Maybe SAM_V1_6_Alignment_OptionalFields_BOPT -- ^ B - [cCsSiIf]​(,[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?)* - Integer or numeric array.
  } deriving (Generic,Typeable)

instance Eq SAM_V1_6_Alignment_OptionalFields where
  SAM_V1_6_Alignment_OptionalFields sam_v1_6_alignment_optionalfields_aopt1
                                    sam_v1_6_alignment_optionalfields_iopt1
                                    sam_v1_6_alignment_optionalfields_fopt1
                                    sam_v1_6_alignment_optionalfields_zopt1
                                    sam_v1_6_alignment_optionalfields_hopt1
                                    sam_v1_6_alignment_optionalfields_bopt1 ==
    SAM_V1_6_Alignment_OptionalFields sam_v1_6_alignment_optionalfields_aopt2
                                      sam_v1_6_alignment_optionalfields_iopt2
                                      sam_v1_6_alignment_optionalfields_fopt2
                                      sam_v1_6_alignment_optionalfields_zopt2
                                      sam_v1_6_alignment_optionalfields_hopt2
                                      sam_v1_6_alignment_optionalfields_bopt2 =
      sam_v1_6_alignment_optionalfields_aopt1  == sam_v1_6_alignment_optionalfields_aopt2  &&
      sam_v1_6_alignment_optionalfields_iopt1  == sam_v1_6_alignment_optionalfields_iopt2  &&
      sam_v1_6_alignment_optionalfields_fopt1  == sam_v1_6_alignment_optionalfields_fopt2  &&
      sam_v1_6_alignment_optionalfields_zopt1  == sam_v1_6_alignment_optionalfields_zopt2  &&
      sam_v1_6_alignment_optionalfields_hopt1  == sam_v1_6_alignment_optionalfields_hopt2  &&
      sam_v1_6_alignment_optionalfields_bopt1  == sam_v1_6_alignment_optionalfields_bopt2

instance Show SAM_V1_6_Alignment_OptionalFields where
  show (SAM_V1_6_Alignment_OptionalFields aopt
                                          iopt
                                          fopt
                                          zopt
                                          hopt
                                          bopt
       ) =
    "SAM_V1_6_Alignment_OptionalFields { "          ++
    "sam_v1_6_alignment_optionalfields_aopt = "     ++
    ( show aopt)                                    ++
    " , sam_v1_6_alignment_optionalfields_iopt = "  ++
    (show iopt)                                     ++
    " , sam_v1_6_alignment_optionalfields_fopt = "  ++
    (show fopt)                                     ++
    " , sam_v1_6_alignment_optionalfields_zopt = "  ++
    (show zopt)                                     ++
    " , sam_v1_6_alignment_optionalfields_hopt = "  ++
    (show hopt)                                     ++
    " , sam_v1_6_alignment_optionalfields_bopt = "  ++
    (show bopt)                                     ++
    " }"