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

-- |
-- Module      :  Data.BAM.Version1_6.BAM.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.BAM.Version1_6.BAM.Alignment.OptionalFields.Base ( -- * BAM version 1.6 alignment optional fields data type
                                                               BAM_V1_6_BAM_Alignment_OptionalFields(..)
                                                             , BAM_V1_6_BAM_Alignment_OptionalFields_SumType(..)
                                                             ) where

import Data.BAM.Version1_6.BAM.Alignment.OptionalFields.AOPT
import Data.BAM.Version1_6.BAM.Alignment.OptionalFields.BigCOPT
import Data.BAM.Version1_6.BAM.Alignment.OptionalFields.BigIOPT
import Data.BAM.Version1_6.BAM.Alignment.OptionalFields.BigSOPT
import Data.BAM.Version1_6.BAM.Alignment.OptionalFields.SmallCOPT
import Data.BAM.Version1_6.BAM.Alignment.OptionalFields.SmallIOPT
import Data.BAM.Version1_6.BAM.Alignment.OptionalFields.SmallSOPT
import Data.BAM.Version1_6.BAM.Alignment.OptionalFields.FOPT
import Data.BAM.Version1_6.BAM.Alignment.OptionalFields.ZOPT
import Data.BAM.Version1_6.BAM.Alignment.OptionalFields.HOPT
import Data.BAM.Version1_6.BAM.Alignment.OptionalFields.BOPT

import Data.Data
import Generics.Deriving.Base

-- | Custom BAM (version 1.6) @"BAM_V1_6_BAM_Alignment_Optional_Fields"@ data type.
--
-- See section 4.2 of the [SAM v1.6](http://samtools.github.io/hts-specs/SAMv1.pdf) specification documentation.
data BAM_V1_6_BAM_Alignment_OptionalFields = BAM_V1_6_BAM_Alignment_OptionalFields
  { BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
bam_v1_6_bam_alignment_optionalfields_aopt        :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT      -- ^ A - [!-~] -
                                                                                                               -- Printable character.
  , BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
bam_v1_6_bam_alignment_optionalfields_smallcopt   :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT -- ^ c - [0-9]+ -
                                                                                                               -- Int8 (signed).
  , BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
bam_v1_6_bam_alignment_optionalfields_bigcopt     :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT   -- ^ C - [0-9]+ -
                                                                                                               -- Word8 (unsigned).
  , BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
bam_v1_6_bam_alignment_optionalfields_smalliopt   :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT -- ^ i - [0-9]+ -
                                                                                                               -- Int32 (signed).
  , BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
bam_v1_6_bam_alignment_optionalfields_bigiopt     :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT   -- ^ I - [0-9]+ -
                                                                                                               -- Word32 (unsigned).
  , BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
bam_v1_6_bam_alignment_optionalfields_smallsopt   :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT -- ^ s - [0-9]+ -
                                                                                                               -- Int16 (signed).
  , BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
bam_v1_6_bam_alignment_optionalfields_bigsopt     :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT   -- ^ S - [0-9]+ -
                                                                                                               -- Word16 (unsigned).
  , BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
bam_v1_6_bam_alignment_optionalfields_fopt        :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT      -- ^ f - [-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)? -
                                                                                                               -- Single-precision floating number.
  , BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
bam_v1_6_bam_alignment_optionalfields_zopt        :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT      -- ^ Z - [ !-~]* -
                                                                                                               -- Printable string, including space.
  , BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
bam_v1_6_bam_alignment_optionalfields_hopt        :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT      -- ^ H - ([0-9A-F][0-9A-F])* -
                                                                                                               -- Byte array in the Hex format.
  , BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt        :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT      -- ^ B - [cCsSiIf]​(,[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?)* -
                                                                                                               -- Integer or numeric array.
  } deriving ((forall x.
 BAM_V1_6_BAM_Alignment_OptionalFields
 -> Rep BAM_V1_6_BAM_Alignment_OptionalFields x)
-> (forall x.
    Rep BAM_V1_6_BAM_Alignment_OptionalFields x
    -> BAM_V1_6_BAM_Alignment_OptionalFields)
-> Generic BAM_V1_6_BAM_Alignment_OptionalFields
forall x.
Rep BAM_V1_6_BAM_Alignment_OptionalFields x
-> BAM_V1_6_BAM_Alignment_OptionalFields
forall x.
BAM_V1_6_BAM_Alignment_OptionalFields
-> Rep BAM_V1_6_BAM_Alignment_OptionalFields x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x.
BAM_V1_6_BAM_Alignment_OptionalFields
-> Rep BAM_V1_6_BAM_Alignment_OptionalFields x
from :: forall x.
BAM_V1_6_BAM_Alignment_OptionalFields
-> Rep BAM_V1_6_BAM_Alignment_OptionalFields x
$cto :: forall x.
Rep BAM_V1_6_BAM_Alignment_OptionalFields x
-> BAM_V1_6_BAM_Alignment_OptionalFields
to :: forall x.
Rep BAM_V1_6_BAM_Alignment_OptionalFields x
-> BAM_V1_6_BAM_Alignment_OptionalFields
Generic,Typeable)

instance Eq BAM_V1_6_BAM_Alignment_OptionalFields where
  BAM_V1_6_BAM_Alignment_OptionalFields Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
bam_v1_6_bam_alignment_optionalfields_aopt1
                                        Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
bam_v1_6_bam_alignment_optionalfields_smallcopt1
                                        Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
bam_v1_6_bam_alignment_optionalfields_bigcopt1
                                        Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
bam_v1_6_bam_alignment_optionalfields_smalliopt1
                                        Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
bam_v1_6_bam_alignment_optionalfields_bigiopt1
                                        Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
bam_v1_6_bam_alignment_optionalfields_smallsopt1
                                        Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
bam_v1_6_bam_alignment_optionalfields_bigsopt1
                                        Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
bam_v1_6_bam_alignment_optionalfields_fopt1
                                        Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
bam_v1_6_bam_alignment_optionalfields_zopt1
                                        Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
bam_v1_6_bam_alignment_optionalfields_hopt1
                                        Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt1 == :: BAM_V1_6_BAM_Alignment_OptionalFields
-> BAM_V1_6_BAM_Alignment_OptionalFields -> Bool
==
    BAM_V1_6_BAM_Alignment_OptionalFields Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
bam_v1_6_bam_alignment_optionalfields_aopt2
                                          Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
bam_v1_6_bam_alignment_optionalfields_smallcopt2
                                          Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
bam_v1_6_bam_alignment_optionalfields_bigcopt2
                                          Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
bam_v1_6_bam_alignment_optionalfields_smalliopt2
                                          Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
bam_v1_6_bam_alignment_optionalfields_bigiopt2
                                          Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
bam_v1_6_bam_alignment_optionalfields_smallsopt2
                                          Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
bam_v1_6_bam_alignment_optionalfields_bigsopt2
                                          Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
bam_v1_6_bam_alignment_optionalfields_fopt2
                                          Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
bam_v1_6_bam_alignment_optionalfields_zopt2
                                          Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
bam_v1_6_bam_alignment_optionalfields_hopt2
                                          Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt2 =
      Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
bam_v1_6_bam_alignment_optionalfields_aopt1      Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT -> Bool
forall a. Eq a => a -> a -> Bool
==  Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
bam_v1_6_bam_alignment_optionalfields_aopt2        Bool -> Bool -> Bool
&&
      Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
bam_v1_6_bam_alignment_optionalfields_smallcopt1 Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT -> Bool
forall a. Eq a => a -> a -> Bool
==  Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
bam_v1_6_bam_alignment_optionalfields_smallcopt2   Bool -> Bool -> Bool
&&
      Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
bam_v1_6_bam_alignment_optionalfields_bigcopt1   Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT -> Bool
forall a. Eq a => a -> a -> Bool
==  Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
bam_v1_6_bam_alignment_optionalfields_bigcopt2     Bool -> Bool -> Bool
&&
      Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
bam_v1_6_bam_alignment_optionalfields_smalliopt1 Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT -> Bool
forall a. Eq a => a -> a -> Bool
==  Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
bam_v1_6_bam_alignment_optionalfields_smalliopt2   Bool -> Bool -> Bool
&&
      Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
bam_v1_6_bam_alignment_optionalfields_bigiopt1   Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT -> Bool
forall a. Eq a => a -> a -> Bool
==  Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
bam_v1_6_bam_alignment_optionalfields_bigiopt2     Bool -> Bool -> Bool
&&
      Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
bam_v1_6_bam_alignment_optionalfields_smallsopt1 Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT -> Bool
forall a. Eq a => a -> a -> Bool
==  Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
bam_v1_6_bam_alignment_optionalfields_smallsopt2   Bool -> Bool -> Bool
&&
      Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
bam_v1_6_bam_alignment_optionalfields_bigsopt1   Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT -> Bool
forall a. Eq a => a -> a -> Bool
==  Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
bam_v1_6_bam_alignment_optionalfields_bigsopt2     Bool -> Bool -> Bool
&&
      Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
bam_v1_6_bam_alignment_optionalfields_fopt1      Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT -> Bool
forall a. Eq a => a -> a -> Bool
==  Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
bam_v1_6_bam_alignment_optionalfields_fopt2        Bool -> Bool -> Bool
&&
      Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
bam_v1_6_bam_alignment_optionalfields_zopt1      Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT -> Bool
forall a. Eq a => a -> a -> Bool
==  Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
bam_v1_6_bam_alignment_optionalfields_zopt2        Bool -> Bool -> Bool
&&
      Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
bam_v1_6_bam_alignment_optionalfields_hopt1      Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT -> Bool
forall a. Eq a => a -> a -> Bool
==  Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
bam_v1_6_bam_alignment_optionalfields_hopt2        Bool -> Bool -> Bool
&&
      Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt1      Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT -> Bool
forall a. Eq a => a -> a -> Bool
==  Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt2

instance Show BAM_V1_6_BAM_Alignment_OptionalFields where
  show :: BAM_V1_6_BAM_Alignment_OptionalFields -> String
show ( BAM_V1_6_BAM_Alignment_OptionalFields Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
aopt
                                                Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
smallcopt
                                                Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
bigcopt
                                                Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
smalliopt
                                                Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
bigiopt
                                                Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
smallsopt
                                                Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
bigsopt
                                                Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
fopt
                                                Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
zopt
                                                Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
hopt
                                                Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bopt
       ) =
    String
"BAM_V1_6_BAM_Alignment_OptionalFields { "             String -> ShowS
forall a. [a] -> [a] -> [a]
++
    String
"bam_v1_6_bam_alignment_optionalfields_aopt = "         String -> ShowS
forall a. [a] -> [a] -> [a]
++
    (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT -> String
forall a. Show a => a -> String
show Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
aopt)                                             String -> ShowS
forall a. [a] -> [a] -> [a]
++
    String
" , bam_v1_6_bam_alignment_optionalfields_smallcopt = " String -> ShowS
forall a. [a] -> [a] -> [a]
++
    (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT -> String
forall a. Show a => a -> String
show Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
smallcopt)                                        String -> ShowS
forall a. [a] -> [a] -> [a]
++
    String
" , bam_v1_6_bam_alignment_optionalfields_bigcopt = "   String -> ShowS
forall a. [a] -> [a] -> [a]
++
    (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT -> String
forall a. Show a => a -> String
show Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
bigcopt)                                          String -> ShowS
forall a. [a] -> [a] -> [a]
++
    String
" , bam_v1_6_bam_alignment_optionalfields_smalliopt = " String -> ShowS
forall a. [a] -> [a] -> [a]
++
    (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT -> String
forall a. Show a => a -> String
show Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
smalliopt)                                        String -> ShowS
forall a. [a] -> [a] -> [a]
++
    String
" , bam_v1_6_bam_alignment_optionalfields_bigiopt = "   String -> ShowS
forall a. [a] -> [a] -> [a]
++
    (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT -> String
forall a. Show a => a -> String
show Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
bigiopt)                                          String -> ShowS
forall a. [a] -> [a] -> [a]
++
    String
" , bam_v1_6_bam_alignment_optionalfields_smallsopt = " String -> ShowS
forall a. [a] -> [a] -> [a]
++
    (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT -> String
forall a. Show a => a -> String
show Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
smallsopt)                                        String -> ShowS
forall a. [a] -> [a] -> [a]
++
    String
" , bam_v1_6_bam_alignment_optionalfields_bigsopt = "   String -> ShowS
forall a. [a] -> [a] -> [a]
++
    (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT -> String
forall a. Show a => a -> String
show Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
bigsopt)                                          String -> ShowS
forall a. [a] -> [a] -> [a]
++
    String
" , bam_v1_6_bam_alignment_optionalfields_fopt = "      String -> ShowS
forall a. [a] -> [a] -> [a]
++
    (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT -> String
forall a. Show a => a -> String
show Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
fopt)                                             String -> ShowS
forall a. [a] -> [a] -> [a]
++
    String
" , bam_v1_6_bam_alignment_optionalfields_zopt = "      String -> ShowS
forall a. [a] -> [a] -> [a]
++
    (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT -> String
forall a. Show a => a -> String
show Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
zopt)                                             String -> ShowS
forall a. [a] -> [a] -> [a]
++
    String
" , bam_v1_6_bam_alignment_optionalfields_hopt = "      String -> ShowS
forall a. [a] -> [a] -> [a]
++
    (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT -> String
forall a. Show a => a -> String
show Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
hopt)                                             String -> ShowS
forall a. [a] -> [a] -> [a]
++
    String
" , bam_v1_6_bam_alignment_optionalfields_bopt = "      String -> ShowS
forall a. [a] -> [a] -> [a]
++
    (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT -> String
forall a. Show a => a -> String
show Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bopt)                                             String -> ShowS
forall a. [a] -> [a] -> [a]
++
    String
" }"

-- | Sum type that can represent any of the
-- BAM_V1_6_BAM_Alignment_OptionalFields types.
data BAM_V1_6_BAM_Alignment_OptionalFields_SumType =
    AOPT
  | SmallCOPT
  | BigCOPT
  | SmallIOPT
  | BigIOPT
  | SmallSOPT
  | BigSOPT
  | FOPT
  | ZOPT
  | HOPT
  | BOPT
  | Empty
  deriving (BAM_V1_6_BAM_Alignment_OptionalFields_SumType
-> BAM_V1_6_BAM_Alignment_OptionalFields_SumType -> Bool
(BAM_V1_6_BAM_Alignment_OptionalFields_SumType
 -> BAM_V1_6_BAM_Alignment_OptionalFields_SumType -> Bool)
-> (BAM_V1_6_BAM_Alignment_OptionalFields_SumType
    -> BAM_V1_6_BAM_Alignment_OptionalFields_SumType -> Bool)
-> Eq BAM_V1_6_BAM_Alignment_OptionalFields_SumType
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: BAM_V1_6_BAM_Alignment_OptionalFields_SumType
-> BAM_V1_6_BAM_Alignment_OptionalFields_SumType -> Bool
== :: BAM_V1_6_BAM_Alignment_OptionalFields_SumType
-> BAM_V1_6_BAM_Alignment_OptionalFields_SumType -> Bool
$c/= :: BAM_V1_6_BAM_Alignment_OptionalFields_SumType
-> BAM_V1_6_BAM_Alignment_OptionalFields_SumType -> Bool
/= :: BAM_V1_6_BAM_Alignment_OptionalFields_SumType
-> BAM_V1_6_BAM_Alignment_OptionalFields_SumType -> Bool
Eq,(forall x.
 BAM_V1_6_BAM_Alignment_OptionalFields_SumType
 -> Rep BAM_V1_6_BAM_Alignment_OptionalFields_SumType x)
-> (forall x.
    Rep BAM_V1_6_BAM_Alignment_OptionalFields_SumType x
    -> BAM_V1_6_BAM_Alignment_OptionalFields_SumType)
-> Generic BAM_V1_6_BAM_Alignment_OptionalFields_SumType
forall x.
Rep BAM_V1_6_BAM_Alignment_OptionalFields_SumType x
-> BAM_V1_6_BAM_Alignment_OptionalFields_SumType
forall x.
BAM_V1_6_BAM_Alignment_OptionalFields_SumType
-> Rep BAM_V1_6_BAM_Alignment_OptionalFields_SumType x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x.
BAM_V1_6_BAM_Alignment_OptionalFields_SumType
-> Rep BAM_V1_6_BAM_Alignment_OptionalFields_SumType x
from :: forall x.
BAM_V1_6_BAM_Alignment_OptionalFields_SumType
-> Rep BAM_V1_6_BAM_Alignment_OptionalFields_SumType x
$cto :: forall x.
Rep BAM_V1_6_BAM_Alignment_OptionalFields_SumType x
-> BAM_V1_6_BAM_Alignment_OptionalFields_SumType
to :: forall x.
Rep BAM_V1_6_BAM_Alignment_OptionalFields_SumType x
-> BAM_V1_6_BAM_Alignment_OptionalFields_SumType
Generic,Typeable)