{-# LANGUAGE FlexibleContexts      #-}
{-# LANGUAGE FlexibleInstances     #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE MultiWayIf            #-}
{-# LANGUAGE TypeFamilies          #-}

-- |
-- Module      :  Data.BAM.Version1_6.Write.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.Write.Base ( -- * Writing
                                        writeBAM_V1_6
                                      ) where

import Data.BAM.Version1_6.Base
import Data.BAM.Version1_6.BAM
import Data.BAM.Version1_6.BAM.BAMAlignments
import Data.BAM.Version1_6.BAM.BAMHeader
import Data.BAM.Version1_6.BAM.Alignment.Base
import Data.BAM.Version1_6.BAM.Alignment.OptionalFields.Base
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.BAM.Version1_6.BAM.ReferenceInformation
import Data.BAM.Version1_6.BGZFBlock
import Data.BAM.Version1_6.GZipHeader
import Data.BAM.Version1_6.Internal
import Data.BAM.Version1_6.Write.Error
import Data.BAM.Version1_6.Write.Internal

import Codec.Compression.Zlib.Raw as CCZlibR (compress)
import Data.ByteString            as DB      (append,concat,empty,fromStrict,hPutStr,length,pack,singleton,toStrict)
import Data.ByteString.Base16     as DBB16
import Data.Base16.Types          as DBB16T
import Data.Digest.CRC32          as DDCRC32 (crc32)
import Data.Foldable                         (forM_,toList)
import Data.List                  as DL      (elem)
import Data.Maybe                            (fromJust)
import System.IO                             (hFlush,hClose,IOMode(..),openBinaryFile,Handle)

-- | Deconstruct a @"BAM_V1_6"@ and
-- write to a file.
deconstructBAM_V1_6 :: Handle
                    -> BAM_V1_6
                    -> IO ()
deconstructBAM_V1_6 :: Handle -> BAM_V1_6 -> IO ()
deconstructBAM_V1_6 Handle
h
                    BAM_V1_6
bamv16 =
  Seq BAM_V1_6_BGZFBlock -> (BAM_V1_6_BGZFBlock -> IO ()) -> IO ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
t a -> (a -> m b) -> m ()
forM_ (BAM_V1_6 -> Seq BAM_V1_6_BGZFBlock
bam_v1_6 BAM_V1_6
bamv16) ((BAM_V1_6_BGZFBlock -> IO ()) -> IO ())
-> (BAM_V1_6_BGZFBlock -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \BAM_V1_6_BGZFBlock
currentbgzfblock ->
    case ( BAM_V1_6_BAM -> Bool
bam_v1_6_bam_endoffilemarker (BAM_V1_6_BAM -> Bool) -> BAM_V1_6_BAM -> Bool
forall a b. (a -> b) -> a -> b
$
             BAM_V1_6_BGZFBlock -> BAM_V1_6_BAM
bam_v1_6_bgzfblock_cdata BAM_V1_6_BGZFBlock
currentbgzfblock
         ) of
      Bool
True  -> do
        -- Write to file.
        -- GZip header.
        ()
_ <-
          Handle -> ByteString -> IO ()
DB.hPutStr Handle
h                                        (ByteString -> IO ()) -> ByteString -> IO ()
forall a b. (a -> b) -> a -> b
$
                     Word8 -> ByteString
DB.singleton                             (Word8 -> ByteString) -> Word8 -> ByteString
forall a b. (a -> b) -> a -> b
$
                       BAM_V1_6_GZipHeader -> Word8
bam_v1_6_gzip_header_gzip_identifier_1 (BAM_V1_6_GZipHeader -> Word8) -> BAM_V1_6_GZipHeader -> Word8
forall a b. (a -> b) -> a -> b
$
                         BAM_V1_6_BGZFBlock -> BAM_V1_6_GZipHeader
bam_v1_6_bgzfblock_gzip_header BAM_V1_6_BGZFBlock
currentbgzfblock
        ()
_ <-
          Handle -> ByteString -> IO ()
DB.hPutStr Handle
h                                        (ByteString -> IO ()) -> ByteString -> IO ()
forall a b. (a -> b) -> a -> b
$
                     Word8 -> ByteString
DB.singleton                             (Word8 -> ByteString) -> Word8 -> ByteString
forall a b. (a -> b) -> a -> b
$
                       BAM_V1_6_GZipHeader -> Word8
bam_v1_6_gzip_header_gzip_identifier_2 (BAM_V1_6_GZipHeader -> Word8) -> BAM_V1_6_GZipHeader -> Word8
forall a b. (a -> b) -> a -> b
$
                         BAM_V1_6_BGZFBlock -> BAM_V1_6_GZipHeader
bam_v1_6_bgzfblock_gzip_header BAM_V1_6_BGZFBlock
currentbgzfblock
        ()
_ <-
          Handle -> ByteString -> IO ()
DB.hPutStr Handle
h                                         (ByteString -> IO ()) -> ByteString -> IO ()
forall a b. (a -> b) -> a -> b
$
                     Word8 -> ByteString
DB.singleton                              (Word8 -> ByteString) -> Word8 -> ByteString
forall a b. (a -> b) -> a -> b
$
                       BAM_V1_6_GZipHeader -> Word8
bam_v1_6_gzip_header_compression_method (BAM_V1_6_GZipHeader -> Word8) -> BAM_V1_6_GZipHeader -> Word8
forall a b. (a -> b) -> a -> b
$
                         BAM_V1_6_BGZFBlock -> BAM_V1_6_GZipHeader
bam_v1_6_bgzfblock_gzip_header BAM_V1_6_BGZFBlock
currentbgzfblock
        ()
_ <-
          Handle -> ByteString -> IO ()
DB.hPutStr Handle
h                                   (ByteString -> IO ()) -> ByteString -> IO ()
forall a b. (a -> b) -> a -> b
$
                     Word8 -> ByteString
DB.singleton                        (Word8 -> ByteString) -> Word8 -> ByteString
forall a b. (a -> b) -> a -> b
$
                       BAM_V1_6_GZipHeader -> Word8
bam_v1_6_gzip_header_header_flags (BAM_V1_6_GZipHeader -> Word8) -> BAM_V1_6_GZipHeader -> Word8
forall a b. (a -> b) -> a -> b
$
                         BAM_V1_6_BGZFBlock -> BAM_V1_6_GZipHeader
bam_v1_6_bgzfblock_gzip_header BAM_V1_6_BGZFBlock
currentbgzfblock
        ()
_ <-
          Handle -> ByteString -> IO ()
DB.hPutStr Handle
h                                        (ByteString -> IO ()) -> ByteString -> IO ()
forall a b. (a -> b) -> a -> b
$
                     Word32 -> ByteString
word32ToByteStringLE                     (Word32 -> ByteString) -> Word32 -> ByteString
forall a b. (a -> b) -> a -> b
$
                       BAM_V1_6_GZipHeader -> Word32
bam_v1_6_gzip_header_modification_time (BAM_V1_6_GZipHeader -> Word32) -> BAM_V1_6_GZipHeader -> Word32
forall a b. (a -> b) -> a -> b
$
                         BAM_V1_6_BGZFBlock -> BAM_V1_6_GZipHeader
bam_v1_6_bgzfblock_gzip_header BAM_V1_6_BGZFBlock
currentbgzfblock
        ()
_ <-
          Handle -> ByteString -> IO ()
DB.hPutStr Handle
h                                  (ByteString -> IO ()) -> ByteString -> IO ()
forall a b. (a -> b) -> a -> b
$
                     Word8 -> ByteString
DB.singleton                       (Word8 -> ByteString) -> Word8 -> ByteString
forall a b. (a -> b) -> a -> b
$
                       BAM_V1_6_GZipHeader -> Word8
bam_v1_6_gzip_header_extra_flags (BAM_V1_6_GZipHeader -> Word8) -> BAM_V1_6_GZipHeader -> Word8
forall a b. (a -> b) -> a -> b
$
                         BAM_V1_6_BGZFBlock -> BAM_V1_6_GZipHeader
bam_v1_6_bgzfblock_gzip_header BAM_V1_6_BGZFBlock
currentbgzfblock
        ()
_ <-
          Handle -> ByteString -> IO ()
DB.hPutStr Handle
h                                       (ByteString -> IO ()) -> ByteString -> IO ()
forall a b. (a -> b) -> a -> b
$
                     Word8 -> ByteString
DB.singleton                            (Word8 -> ByteString) -> Word8 -> ByteString
forall a b. (a -> b) -> a -> b
$
                       BAM_V1_6_GZipHeader -> Word8
bam_v1_6_gzip_header_operating_system (BAM_V1_6_GZipHeader -> Word8) -> BAM_V1_6_GZipHeader -> Word8
forall a b. (a -> b) -> a -> b
$
                         BAM_V1_6_BGZFBlock -> BAM_V1_6_GZipHeader
bam_v1_6_bgzfblock_gzip_header BAM_V1_6_BGZFBlock
currentbgzfblock   
        ()
_ <-
          Handle -> ByteString -> IO ()
DB.hPutStr Handle
h                                   (ByteString -> IO ()) -> ByteString -> IO ()
forall a b. (a -> b) -> a -> b
$
                     Word16 -> ByteString
word16ToByteStringLE                (Word16 -> ByteString) -> Word16 -> ByteString
forall a b. (a -> b) -> a -> b
$
                       BAM_V1_6_GZipHeader -> Word16
bam_v1_6_gzip_header_extra_length (BAM_V1_6_GZipHeader -> Word16) -> BAM_V1_6_GZipHeader -> Word16
forall a b. (a -> b) -> a -> b
$
                         BAM_V1_6_BGZFBlock -> BAM_V1_6_GZipHeader
bam_v1_6_bgzfblock_gzip_header BAM_V1_6_BGZFBlock
currentbgzfblock
        -- Subfield Identifier 1.
        ()
_ <-
          Handle -> ByteString -> IO ()
DB.hPutStr Handle
h            (ByteString -> IO ()) -> ByteString -> IO ()
forall a b. (a -> b) -> a -> b
$
                     Word8 -> ByteString
DB.singleton (Word8 -> ByteString) -> Word8 -> ByteString
forall a b. (a -> b) -> a -> b
$
                       BAM_V1_6_BGZFBlock -> Word8
bam_v1_6_bgzfblock_subfield_identifier_one BAM_V1_6_BGZFBlock
currentbgzfblock
        -- Subfield Identifier 2.
        ()
_ <-
          Handle -> ByteString -> IO ()
DB.hPutStr Handle
h            (ByteString -> IO ()) -> ByteString -> IO ()
forall a b. (a -> b) -> a -> b
$
                     Word8 -> ByteString
DB.singleton (Word8 -> ByteString) -> Word8 -> ByteString
forall a b. (a -> b) -> a -> b
$
                       BAM_V1_6_BGZFBlock -> Word8
bam_v1_6_bgzfblock_subfield_identifier_two BAM_V1_6_BGZFBlock
currentbgzfblock
        -- Subfield LENgth.
        ()
_ <-
          Handle -> ByteString -> IO ()
DB.hPutStr Handle
h                    (ByteString -> IO ()) -> ByteString -> IO ()
forall a b. (a -> b) -> a -> b
$
                     Word16 -> ByteString
word16ToByteStringLE (Word16 -> ByteString) -> Word16 -> ByteString
forall a b. (a -> b) -> a -> b
$
                       BAM_V1_6_BGZFBlock -> Word16
bam_v1_6_bgzfblock_subfield_length BAM_V1_6_BGZFBlock
currentbgzfblock
        -- total Block SIZE minus 1.
        ()
_ <-
          Handle -> ByteString -> IO ()
DB.hPutStr Handle
h                    (ByteString -> IO ()) -> ByteString -> IO ()
forall a b. (a -> b) -> a -> b
$
                     Word16 -> ByteString
word16ToByteStringLE (Word16 -> ByteString) -> Word16 -> ByteString
forall a b. (a -> b) -> a -> b
$
                       BAM_V1_6_BGZFBlock -> Word16
bam_v1_6_bgzfblock_total_block_size_minus_one BAM_V1_6_BGZFBlock
currentbgzfblock
        -- Write the empty CDATA block.
        ()
_ <-
          Handle -> ByteString -> IO ()
DB.hPutStr Handle
h (ByteString -> IO ()) -> ByteString -> IO ()
forall a b. (a -> b) -> a -> b
$
                     [Word8] -> ByteString
DB.pack
                       [ Word8
0x03
                       , Word8
0x00
                       ]
        -- CRC-32.
        ()
_ <-
          Handle -> ByteString -> IO ()
DB.hPutStr Handle
h                    (ByteString -> IO ()) -> ByteString -> IO ()
forall a b. (a -> b) -> a -> b
$
                     Word32 -> ByteString
word32ToByteStringLE (Word32 -> ByteString) -> Word32 -> ByteString
forall a b. (a -> b) -> a -> b
$
                         BAM_V1_6_BGZFBlock -> Word32
bam_v1_6_bgzfblock_crc32 BAM_V1_6_BGZFBlock
currentbgzfblock
        -- Input SIZE (length of uncompressed data).
        Handle -> ByteString -> IO ()
DB.hPutStr Handle
h                    (ByteString -> IO ()) -> ByteString -> IO ()
forall a b. (a -> b) -> a -> b
$
                   Word32 -> ByteString
word32ToByteStringLE (Word32 -> ByteString) -> Word32 -> ByteString
forall a b. (a -> b) -> a -> b
$
                     BAM_V1_6_BGZFBlock -> Word32
bam_v1_6_bgzfblock_isize BAM_V1_6_BGZFBlock
currentbgzfblock
      Bool
False ->
        case ( BAM_V1_6_BAM -> Maybe BAM_V1_6_BAM_BAMHeader
bam_v1_6_bam_bamheader (BAM_V1_6_BAM -> Maybe BAM_V1_6_BAM_BAMHeader)
-> BAM_V1_6_BAM -> Maybe BAM_V1_6_BAM_BAMHeader
forall a b. (a -> b) -> a -> b
$
                 BAM_V1_6_BGZFBlock -> BAM_V1_6_BAM
bam_v1_6_bgzfblock_cdata BAM_V1_6_BGZFBlock
currentbgzfblock
             ) of
          Maybe BAM_V1_6_BAM_BAMHeader
Nothing                      ->
            case ( BAM_V1_6_BAM -> Maybe BAM_V1_6_BAM_BAMAlignments
bam_v1_6_bam_bamalignments (BAM_V1_6_BAM -> Maybe BAM_V1_6_BAM_BAMAlignments)
-> BAM_V1_6_BAM -> Maybe BAM_V1_6_BAM_BAMAlignments
forall a b. (a -> b) -> a -> b
$
                     BAM_V1_6_BGZFBlock -> BAM_V1_6_BAM
bam_v1_6_bgzfblock_cdata BAM_V1_6_BGZFBlock
currentbgzfblock
                 ) of
              Maybe BAM_V1_6_BAM_BAMAlignments
Nothing ->
                [Char] -> IO ()
forall a. HasCallStack => [Char] -> a
error ([Char] -> IO ()) -> [Char] -> IO ()
forall a b. (a -> b) -> a -> b
$
                  BAM_V1_6_Write_Error -> [Char]
forall a. Show a => a -> [Char]
show BAM_V1_6_Write_Error
BAM_V1_6_Write_Error_No_Data
              Just BAM_V1_6_BAM_BAMAlignments
bam_v1_6_bam_bamalignments' -> do
                -- Write to file.
                -- GZip header.
                ()
_ <-
                  Handle -> ByteString -> IO ()
DB.hPutStr Handle
h                                        (ByteString -> IO ()) -> ByteString -> IO ()
forall a b. (a -> b) -> a -> b
$
                             Word8 -> ByteString
DB.singleton                             (Word8 -> ByteString) -> Word8 -> ByteString
forall a b. (a -> b) -> a -> b
$
                               BAM_V1_6_GZipHeader -> Word8
bam_v1_6_gzip_header_gzip_identifier_1 (BAM_V1_6_GZipHeader -> Word8) -> BAM_V1_6_GZipHeader -> Word8
forall a b. (a -> b) -> a -> b
$
                                 BAM_V1_6_BGZFBlock -> BAM_V1_6_GZipHeader
bam_v1_6_bgzfblock_gzip_header BAM_V1_6_BGZFBlock
currentbgzfblock
                ()
_ <-
                  Handle -> ByteString -> IO ()
DB.hPutStr Handle
h                                        (ByteString -> IO ()) -> ByteString -> IO ()
forall a b. (a -> b) -> a -> b
$
                             Word8 -> ByteString
DB.singleton                             (Word8 -> ByteString) -> Word8 -> ByteString
forall a b. (a -> b) -> a -> b
$
                               BAM_V1_6_GZipHeader -> Word8
bam_v1_6_gzip_header_gzip_identifier_2 (BAM_V1_6_GZipHeader -> Word8) -> BAM_V1_6_GZipHeader -> Word8
forall a b. (a -> b) -> a -> b
$
                                 BAM_V1_6_BGZFBlock -> BAM_V1_6_GZipHeader
bam_v1_6_bgzfblock_gzip_header BAM_V1_6_BGZFBlock
currentbgzfblock
                ()
_ <-
                  Handle -> ByteString -> IO ()
DB.hPutStr Handle
h                                         (ByteString -> IO ()) -> ByteString -> IO ()
forall a b. (a -> b) -> a -> b
$
                             Word8 -> ByteString
DB.singleton                              (Word8 -> ByteString) -> Word8 -> ByteString
forall a b. (a -> b) -> a -> b
$
                               BAM_V1_6_GZipHeader -> Word8
bam_v1_6_gzip_header_compression_method (BAM_V1_6_GZipHeader -> Word8) -> BAM_V1_6_GZipHeader -> Word8
forall a b. (a -> b) -> a -> b
$
                                 BAM_V1_6_BGZFBlock -> BAM_V1_6_GZipHeader
bam_v1_6_bgzfblock_gzip_header BAM_V1_6_BGZFBlock
currentbgzfblock
                ()
_ <-
                  Handle -> ByteString -> IO ()
DB.hPutStr Handle
h                                   (ByteString -> IO ()) -> ByteString -> IO ()
forall a b. (a -> b) -> a -> b
$
                             Word8 -> ByteString
DB.singleton                        (Word8 -> ByteString) -> Word8 -> ByteString
forall a b. (a -> b) -> a -> b
$
                               BAM_V1_6_GZipHeader -> Word8
bam_v1_6_gzip_header_header_flags (BAM_V1_6_GZipHeader -> Word8) -> BAM_V1_6_GZipHeader -> Word8
forall a b. (a -> b) -> a -> b
$
                                 BAM_V1_6_BGZFBlock -> BAM_V1_6_GZipHeader
bam_v1_6_bgzfblock_gzip_header BAM_V1_6_BGZFBlock
currentbgzfblock
                ()
_ <-
                  Handle -> ByteString -> IO ()
DB.hPutStr Handle
h                                        (ByteString -> IO ()) -> ByteString -> IO ()
forall a b. (a -> b) -> a -> b
$
                             Word32 -> ByteString
word32ToByteStringLE                     (Word32 -> ByteString) -> Word32 -> ByteString
forall a b. (a -> b) -> a -> b
$
                               BAM_V1_6_GZipHeader -> Word32
bam_v1_6_gzip_header_modification_time (BAM_V1_6_GZipHeader -> Word32) -> BAM_V1_6_GZipHeader -> Word32
forall a b. (a -> b) -> a -> b
$
                                 BAM_V1_6_BGZFBlock -> BAM_V1_6_GZipHeader
bam_v1_6_bgzfblock_gzip_header BAM_V1_6_BGZFBlock
currentbgzfblock
                ()
_ <-
                  Handle -> ByteString -> IO ()
DB.hPutStr Handle
h                                  (ByteString -> IO ()) -> ByteString -> IO ()
forall a b. (a -> b) -> a -> b
$
                             Word8 -> ByteString
DB.singleton                       (Word8 -> ByteString) -> Word8 -> ByteString
forall a b. (a -> b) -> a -> b
$
                               BAM_V1_6_GZipHeader -> Word8
bam_v1_6_gzip_header_extra_flags (BAM_V1_6_GZipHeader -> Word8) -> BAM_V1_6_GZipHeader -> Word8
forall a b. (a -> b) -> a -> b
$
                                 BAM_V1_6_BGZFBlock -> BAM_V1_6_GZipHeader
bam_v1_6_bgzfblock_gzip_header BAM_V1_6_BGZFBlock
currentbgzfblock
                ()
_ <-
                  Handle -> ByteString -> IO ()
DB.hPutStr Handle
h                                       (ByteString -> IO ()) -> ByteString -> IO ()
forall a b. (a -> b) -> a -> b
$
                             Word8 -> ByteString
DB.singleton                            (Word8 -> ByteString) -> Word8 -> ByteString
forall a b. (a -> b) -> a -> b
$
                               BAM_V1_6_GZipHeader -> Word8
bam_v1_6_gzip_header_operating_system (BAM_V1_6_GZipHeader -> Word8) -> BAM_V1_6_GZipHeader -> Word8
forall a b. (a -> b) -> a -> b
$
                                BAM_V1_6_BGZFBlock -> BAM_V1_6_GZipHeader
bam_v1_6_bgzfblock_gzip_header BAM_V1_6_BGZFBlock
currentbgzfblock   
                ()
_ <-
                  Handle -> ByteString -> IO ()
DB.hPutStr Handle
h                                   (ByteString -> IO ()) -> ByteString -> IO ()
forall a b. (a -> b) -> a -> b
$
                             Word16 -> ByteString
word16ToByteStringLE                (Word16 -> ByteString) -> Word16 -> ByteString
forall a b. (a -> b) -> a -> b
$
                               BAM_V1_6_GZipHeader -> Word16
bam_v1_6_gzip_header_extra_length (BAM_V1_6_GZipHeader -> Word16) -> BAM_V1_6_GZipHeader -> Word16
forall a b. (a -> b) -> a -> b
$
                                 BAM_V1_6_BGZFBlock -> BAM_V1_6_GZipHeader
bam_v1_6_bgzfblock_gzip_header BAM_V1_6_BGZFBlock
currentbgzfblock
                -- Subfield Identifier 1.
                ()
_ <-
                  Handle -> ByteString -> IO ()
DB.hPutStr Handle
h            (ByteString -> IO ()) -> ByteString -> IO ()
forall a b. (a -> b) -> a -> b
$
                             Word8 -> ByteString
DB.singleton (Word8 -> ByteString) -> Word8 -> ByteString
forall a b. (a -> b) -> a -> b
$
                               BAM_V1_6_BGZFBlock -> Word8
bam_v1_6_bgzfblock_subfield_identifier_one BAM_V1_6_BGZFBlock
currentbgzfblock
                -- Subfield Identifier 2.
                ()
_ <-
                  Handle -> ByteString -> IO ()
DB.hPutStr Handle
h            (ByteString -> IO ()) -> ByteString -> IO ()
forall a b. (a -> b) -> a -> b
$
                             Word8 -> ByteString
DB.singleton (Word8 -> ByteString) -> Word8 -> ByteString
forall a b. (a -> b) -> a -> b
$
                               BAM_V1_6_BGZFBlock -> Word8
bam_v1_6_bgzfblock_subfield_identifier_two BAM_V1_6_BGZFBlock
currentbgzfblock
                -- Subfield LENgth.
                ()
_ <-
                  Handle -> ByteString -> IO ()
DB.hPutStr Handle
h                    (ByteString -> IO ()) -> ByteString -> IO ()
forall a b. (a -> b) -> a -> b
$
                             Word16 -> ByteString
word16ToByteStringLE (Word16 -> ByteString) -> Word16 -> ByteString
forall a b. (a -> b) -> a -> b
$
                               BAM_V1_6_BGZFBlock -> Word16
bam_v1_6_bgzfblock_subfield_length BAM_V1_6_BGZFBlock
currentbgzfblock
                let bam_v1_6_bam_bamalignments'' :: Seq ByteString
bam_v1_6_bam_bamalignments'' = (BAM_V1_6_BAM_Alignment -> ByteString)
-> Seq BAM_V1_6_BAM_Alignment -> Seq ByteString
forall a b. (a -> b) -> Seq a -> Seq b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\BAM_V1_6_BAM_Alignment
currentbamalignmentrecord -> do
                                                               let preoptionalfields :: ByteString
preoptionalfields = ( Word32 -> ByteString
word32ToByteStringLE (Word32 -> ByteString) -> Word32 -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                           BAM_V1_6_BAM_Alignment -> Word32
bam_v1_6_bam_alignment_block_size BAM_V1_6_BAM_Alignment
currentbamalignmentrecord
                                                                                       )
                                                                                       ByteString -> ByteString -> ByteString
`DB.append`
                                                                                       ( Int32 -> ByteString
int32ToByteStringLE (Int32 -> ByteString) -> Int32 -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                           BAM_V1_6_BAM_Alignment -> Int32
bam_v1_6_bam_alignment_refID BAM_V1_6_BAM_Alignment
currentbamalignmentrecord
                                                                                       )
                                                                                       ByteString -> ByteString -> ByteString
`DB.append`
                                                                                       ( Int32 -> ByteString
int32ToByteStringLE (Int32 -> ByteString) -> Int32 -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                           BAM_V1_6_BAM_Alignment -> Int32
bam_v1_6_bam_alignment_pos BAM_V1_6_BAM_Alignment
currentbamalignmentrecord
                                                                                       )
                                                                                       ByteString -> ByteString -> ByteString
`DB.append`
                                                                                       ( Word8 -> ByteString
DB.singleton (Word8 -> ByteString) -> Word8 -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                           BAM_V1_6_BAM_Alignment -> Word8
bam_v1_6_bam_alignment_l_read_name BAM_V1_6_BAM_Alignment
currentbamalignmentrecord
                                                                                       )
                                                                                       ByteString -> ByteString -> ByteString
`DB.append`
                                                                                       ( Word8 -> ByteString
DB.singleton (Word8 -> ByteString) -> Word8 -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                           BAM_V1_6_BAM_Alignment -> Word8
bam_v1_6_bam_alignment_mapq BAM_V1_6_BAM_Alignment
currentbamalignmentrecord
                                                                                       )
                                                                                       ByteString -> ByteString -> ByteString
`DB.append`
                                                                                       ( Word16 -> ByteString
word16ToByteStringLE (Word16 -> ByteString) -> Word16 -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                           BAM_V1_6_BAM_Alignment -> Word16
bam_v1_6_bam_alignment_bin BAM_V1_6_BAM_Alignment
currentbamalignmentrecord
                                                                                       )
                                                                                       ByteString -> ByteString -> ByteString
`DB.append`
                                                                                       ( Word16 -> ByteString
word16ToByteStringLE (Word16 -> ByteString) -> Word16 -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                           BAM_V1_6_BAM_Alignment -> Word16
bam_v1_6_bam_alignment_n_cigar_op BAM_V1_6_BAM_Alignment
currentbamalignmentrecord
                                                                                       )
                                                                                       ByteString -> ByteString -> ByteString
`DB.append`
                                                                                       ( Word16 -> ByteString
word16ToByteStringLE (Word16 -> ByteString) -> Word16 -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                           BAM_V1_6_BAM_Alignment -> Word16
bam_v1_6_bam_alignment_flag BAM_V1_6_BAM_Alignment
currentbamalignmentrecord
                                                                                       )
                                                                                       ByteString -> ByteString -> ByteString
`DB.append`
                                                                                       ( Word32 -> ByteString
word32ToByteStringLE (Word32 -> ByteString) -> Word32 -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                           BAM_V1_6_BAM_Alignment -> Word32
bam_v1_6_bam_alignment_l_seq BAM_V1_6_BAM_Alignment
currentbamalignmentrecord
                                                                                       )
                                                                                       ByteString -> ByteString -> ByteString
`DB.append`
                                                                                       ( Int32 -> ByteString
int32ToByteStringLE (Int32 -> ByteString) -> Int32 -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                           BAM_V1_6_BAM_Alignment -> Int32
bam_v1_6_bam_alignment_next_refID BAM_V1_6_BAM_Alignment
currentbamalignmentrecord
                                                                                       )
                                                                                       ByteString -> ByteString -> ByteString
`DB.append`
                                                                                       ( Int32 -> ByteString
int32ToByteStringLE (Int32 -> ByteString) -> Int32 -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                           BAM_V1_6_BAM_Alignment -> Int32
bam_v1_6_bam_alignment_next_pos BAM_V1_6_BAM_Alignment
currentbamalignmentrecord
                                                                                       )
                                                                                       ByteString -> ByteString -> ByteString
`DB.append`
                                                                                       ( Int32 -> ByteString
int32ToByteStringLE (Int32 -> ByteString) -> Int32 -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                           BAM_V1_6_BAM_Alignment -> Int32
bam_v1_6_bam_alignment_tlen BAM_V1_6_BAM_Alignment
currentbamalignmentrecord
                                                                                       )
                                                                                       ByteString -> ByteString -> ByteString
`DB.append`
                                                                                       BAM_V1_6_BAM_Alignment -> ByteString
bam_v1_6_bam_alignment_read_name BAM_V1_6_BAM_Alignment
currentbamalignmentrecord
                                                                                       ByteString -> ByteString -> ByteString
`DB.append`
                                                                                       ( [ByteString] -> ByteString
DB.concat ([ByteString] -> ByteString) -> [ByteString] -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                           Seq ByteString -> [ByteString]
forall a. Seq a -> [a]
forall (t :: * -> *) a. Foldable t => t a -> [a]
toList  (Seq ByteString -> [ByteString]) -> Seq ByteString -> [ByteString]
forall a b. (a -> b) -> a -> b
$
                                                                                             (Word32 -> ByteString) -> Seq Word32 -> Seq ByteString
forall a b. (a -> b) -> Seq a -> Seq b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\Word32
currentcigar ->
                                                                                                     Word32 -> ByteString
word32ToByteStringLE Word32
currentcigar
                                                                                                  )
                                                                                             (BAM_V1_6_BAM_Alignment -> Seq Word32
bam_v1_6_bam_alignment_cigar BAM_V1_6_BAM_Alignment
currentbamalignmentrecord)
                                                                                       )
                                                                                       ByteString -> ByteString -> ByteString
`DB.append`
                                                                                       ( [Word8] -> ByteString
encodeSeqField ([Word8] -> ByteString) -> [Word8] -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                           Seq Word8 -> [Word8]
forall a. Seq a -> [a]
forall (t :: * -> *) a. Foldable t => t a -> [a]
toList       (Seq Word8 -> [Word8]) -> Seq Word8 -> [Word8]
forall a b. (a -> b) -> a -> b
$
                                                                                             BAM_V1_6_BAM_Alignment -> Seq Word8
bam_v1_6_bam_alignment_seq BAM_V1_6_BAM_Alignment
currentbamalignmentrecord
                                                                                       )
                                                                                       ByteString -> ByteString -> ByteString
`DB.append`
                                                                                       ( BAM_V1_6_BAM_Alignment -> ByteString
bam_v1_6_bam_alignment_qual BAM_V1_6_BAM_Alignment
currentbamalignmentrecord
                                                                                       )
                                                               let optionalfields :: ByteString
optionalfields = [ByteString] -> ByteString
DB.concat ([ByteString] -> ByteString) -> [ByteString] -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                      Seq ByteString -> [ByteString]
forall a. Seq a -> [a]
forall (t :: * -> *) a. Foldable t => t a -> [a]
toList  (Seq ByteString -> [ByteString]) -> Seq ByteString -> [ByteString]
forall a b. (a -> b) -> a -> b
$
                                                                                        (BAM_V1_6_BAM_Alignment_OptionalFields -> ByteString)
-> Seq BAM_V1_6_BAM_Alignment_OptionalFields -> Seq ByteString
forall a b. (a -> b) -> Seq a -> Seq b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield -> do
                                                                                                -- Walk through optional fields.
                                                                                                let optionalfieldsl :: [BAM_V1_6_BAM_Alignment_OptionalFields_SumType]
optionalfieldsl = [ case ( BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
bam_v1_6_bam_alignment_optionalfields_aopt
                                                                                                                                 BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield 
                                                                                                                             ) of
                                                                                                                          Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
Nothing ->
                                                                                                                            BAM_V1_6_BAM_Alignment_OptionalFields_SumType
Empty
                                                                                                                          Just BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
_  ->
                                                                                                                            BAM_V1_6_BAM_Alignment_OptionalFields_SumType
AOPT
                                                                                                                      , case ( BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
bam_v1_6_bam_alignment_optionalfields_smallcopt
                                                                                                                                 BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                                             ) of
                                                                                                                          Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
Nothing ->
                                                                                                                            BAM_V1_6_BAM_Alignment_OptionalFields_SumType
Empty
                                                                                                                          Just BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
_  ->
                                                                                                                            BAM_V1_6_BAM_Alignment_OptionalFields_SumType
SmallCOPT
                                                                                                                      , case ( BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
bam_v1_6_bam_alignment_optionalfields_bigcopt
                                                                                                                                 BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                                             ) of
                                                                                                                          Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
Nothing ->
                                                                                                                            BAM_V1_6_BAM_Alignment_OptionalFields_SumType
Empty
                                                                                                                          Just BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
_  ->
                                                                                                                            BAM_V1_6_BAM_Alignment_OptionalFields_SumType
BigCOPT
                                                                                                                      , case ( BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
bam_v1_6_bam_alignment_optionalfields_smalliopt
                                                                                                                                 BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                                             ) of
                                                                                                                          Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
Nothing ->
                                                                                                                            BAM_V1_6_BAM_Alignment_OptionalFields_SumType
Empty
                                                                                                                          Just BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
_  ->
                                                                                                                            BAM_V1_6_BAM_Alignment_OptionalFields_SumType
SmallIOPT
                                                                                                                      , case ( BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
bam_v1_6_bam_alignment_optionalfields_bigiopt
                                                                                                                                 BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                                             ) of
                                                                                                                          Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
Nothing ->
                                                                                                                            BAM_V1_6_BAM_Alignment_OptionalFields_SumType
Empty
                                                                                                                          Just BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
_  ->
                                                                                                                            BAM_V1_6_BAM_Alignment_OptionalFields_SumType
BigIOPT
                                                                                                                      , case ( BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
bam_v1_6_bam_alignment_optionalfields_smallsopt
                                                                                                                                 BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                                             ) of
                                                                                                                          Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
Nothing ->
                                                                                                                            BAM_V1_6_BAM_Alignment_OptionalFields_SumType
Empty
                                                                                                                          Just BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
_  ->
                                                                                                                            BAM_V1_6_BAM_Alignment_OptionalFields_SumType
SmallSOPT
                                                                                                                      , case ( BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
bam_v1_6_bam_alignment_optionalfields_bigsopt
                                                                                                                                 BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                                             ) of
                                                                                                                          Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
Nothing ->
                                                                                                                            BAM_V1_6_BAM_Alignment_OptionalFields_SumType
Empty
                                                                                                                          Just BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
_  ->
                                                                                                                            BAM_V1_6_BAM_Alignment_OptionalFields_SumType
BigSOPT
                                                                                                                      , case ( BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
bam_v1_6_bam_alignment_optionalfields_fopt
                                                                                                                                 BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                                             ) of
                                                                                                                          Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
Nothing ->
                                                                                                                            BAM_V1_6_BAM_Alignment_OptionalFields_SumType
Empty
                                                                                                                          Just BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
_  ->
                                                                                                                            BAM_V1_6_BAM_Alignment_OptionalFields_SumType
FOPT
                                                                                                                      , case ( BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
bam_v1_6_bam_alignment_optionalfields_zopt
                                                                                                                                 BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                                             ) of
                                                                                                                          Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
Nothing ->
                                                                                                                            BAM_V1_6_BAM_Alignment_OptionalFields_SumType
Empty
                                                                                                                          Just BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
_  ->
                                                                                                                            BAM_V1_6_BAM_Alignment_OptionalFields_SumType
ZOPT
                                                                                                                      , case ( BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
bam_v1_6_bam_alignment_optionalfields_hopt
                                                                                                                                 BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                                             ) of
                                                                                                                          Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
Nothing ->
                                                                                                                            BAM_V1_6_BAM_Alignment_OptionalFields_SumType
Empty
                                                                                                                          Just BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
_  ->
                                                                                                                            BAM_V1_6_BAM_Alignment_OptionalFields_SumType
HOPT
                                                                                                                      , case ( BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt
                                                                                                                                 BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                                             ) of
                                                                                                                          Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
Nothing ->
                                                                                                                            BAM_V1_6_BAM_Alignment_OptionalFields_SumType
Empty
                                                                                                                          Just BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
_  ->
                                                                                                                            BAM_V1_6_BAM_Alignment_OptionalFields_SumType
BOPT
                                                                                                                      ] :: [BAM_V1_6_BAM_Alignment_OptionalFields_SumType]
                                                                                                if | BAM_V1_6_BAM_Alignment_OptionalFields_SumType
AOPT BAM_V1_6_BAM_Alignment_OptionalFields_SumType
-> [BAM_V1_6_BAM_Alignment_OptionalFields_SumType] -> Bool
forall a. Eq a => a -> [a] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`DL.elem` [BAM_V1_6_BAM_Alignment_OptionalFields_SumType]
optionalfieldsl
                                                                                                   -> ( BAM_V1_6_BAM_Alignment_OptionalFields_AOPT -> ByteString
bam_v1_6_bam_alignment_optionalfields_aopt_tag (BAM_V1_6_BAM_Alignment_OptionalFields_AOPT -> ByteString)
-> BAM_V1_6_BAM_Alignment_OptionalFields_AOPT -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                          Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                     (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_AOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                            BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
bam_v1_6_bam_alignment_optionalfields_aopt
                                                                                                              BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                      )
                                                                                                      ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                      ( Word8 -> ByteString
DB.singleton Word8
0x41 --'A'
                                                                                                      )
                                                                                                      ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                      ( Word8 -> ByteString
DB.singleton                                       (Word8 -> ByteString) -> Word8 -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                          BAM_V1_6_BAM_Alignment_OptionalFields_AOPT -> Word8
bam_v1_6_bam_alignment_optionalfields_aopt_value (BAM_V1_6_BAM_Alignment_OptionalFields_AOPT -> Word8)
-> BAM_V1_6_BAM_Alignment_OptionalFields_AOPT -> Word8
forall a b. (a -> b) -> a -> b
$
                                                                                                            Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                       (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_AOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                              BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
bam_v1_6_bam_alignment_optionalfields_aopt
                                                                                                                BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                      )
                                                                                                   | BAM_V1_6_BAM_Alignment_OptionalFields_SumType
SmallCOPT BAM_V1_6_BAM_Alignment_OptionalFields_SumType
-> [BAM_V1_6_BAM_Alignment_OptionalFields_SumType] -> Bool
forall a. Eq a => a -> [a] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`DL.elem` [BAM_V1_6_BAM_Alignment_OptionalFields_SumType]
optionalfieldsl
                                                                                                   -> ( BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT -> ByteString
bam_v1_6_bam_alignment_optionalfields_smallcopt_tag (BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT -> ByteString)
-> BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                          Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                          (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                            BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
bam_v1_6_bam_alignment_optionalfields_smallcopt
                                                                                                              BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                      )
                                                                                                      ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                      ( Word8 -> ByteString
DB.singleton Word8
0x63 --'c'
                                                                                                      )
                                                                                                      ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                      ( Int8 -> ByteString
int8ToByteString                                        (Int8 -> ByteString) -> Int8 -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                          BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT -> Int8
bam_v1_6_bam_alignment_optionalfields_smallcopt_value (BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT -> Int8)
-> BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT -> Int8
forall a b. (a -> b) -> a -> b
$
                                                                                                            Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                            (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                              BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
bam_v1_6_bam_alignment_optionalfields_smallcopt
                                                                                                                BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                      )
                                                                                                   | BAM_V1_6_BAM_Alignment_OptionalFields_SumType
BigCOPT BAM_V1_6_BAM_Alignment_OptionalFields_SumType
-> [BAM_V1_6_BAM_Alignment_OptionalFields_SumType] -> Bool
forall a. Eq a => a -> [a] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`DL.elem` [BAM_V1_6_BAM_Alignment_OptionalFields_SumType]
optionalfieldsl
                                                                                                   -> ( BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT -> ByteString
bam_v1_6_bam_alignment_optionalfields_bigcopt_tag   (BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT -> ByteString)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                          Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                          (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                            BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
bam_v1_6_bam_alignment_optionalfields_bigcopt
                                                                                                              BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                      )
                                                                                                      ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                      ( Word8 -> ByteString
DB.singleton Word8
0x43 --'C'
                                                                                                      )
                                                                                                      ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                      ( Word8 -> ByteString
DB.singleton                                          (Word8 -> ByteString) -> Word8 -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                          BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT -> Word8
bam_v1_6_bam_alignment_optionalfields_bigcopt_value (BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT -> Word8)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT -> Word8
forall a b. (a -> b) -> a -> b
$
                                                                                                            Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                          (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                              BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
bam_v1_6_bam_alignment_optionalfields_bigcopt
                                                                                                                BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                      )
                                                                                                   | BAM_V1_6_BAM_Alignment_OptionalFields_SumType
SmallIOPT BAM_V1_6_BAM_Alignment_OptionalFields_SumType
-> [BAM_V1_6_BAM_Alignment_OptionalFields_SumType] -> Bool
forall a. Eq a => a -> [a] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`DL.elem` [BAM_V1_6_BAM_Alignment_OptionalFields_SumType]
optionalfieldsl
                                                                                                   -> ( BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT -> ByteString
bam_v1_6_bam_alignment_optionalfields_smalliopt_tag (BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT -> ByteString)
-> BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                          Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                          (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                            BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
bam_v1_6_bam_alignment_optionalfields_smalliopt
                                                                                                              BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                      )
                                                                                                      ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                      ( Word8 -> ByteString
DB.singleton Word8
0x69 --'i'
                                                                                                      )
                                                                                                      ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                      ( Int32 -> ByteString
int32ToByteStringLE                                     (Int32 -> ByteString) -> Int32 -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                          BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT -> Int32
bam_v1_6_bam_alignment_optionalfields_smalliopt_value (BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT -> Int32)
-> BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT -> Int32
forall a b. (a -> b) -> a -> b
$
                                                                                                            Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                            (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                              BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
bam_v1_6_bam_alignment_optionalfields_smalliopt
                                                                                                                BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                      )
                                                                                                   | BAM_V1_6_BAM_Alignment_OptionalFields_SumType
BigIOPT BAM_V1_6_BAM_Alignment_OptionalFields_SumType
-> [BAM_V1_6_BAM_Alignment_OptionalFields_SumType] -> Bool
forall a. Eq a => a -> [a] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`DL.elem` [BAM_V1_6_BAM_Alignment_OptionalFields_SumType]
optionalfieldsl
                                                                                                   -> ( BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT -> ByteString
bam_v1_6_bam_alignment_optionalfields_bigiopt_tag (BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT -> ByteString)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                          Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                        (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                            BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
bam_v1_6_bam_alignment_optionalfields_bigiopt
                                                                                                              BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                      )
                                                                                                      ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                      ( Word8 -> ByteString
DB.singleton Word8
0x49 --'I'
                                                                                                      )
                                                                                                      ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                      ( Word32 -> ByteString
word32ToByteStringLE                                  (Word32 -> ByteString) -> Word32 -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                          BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT -> Word32
bam_v1_6_bam_alignment_optionalfields_bigiopt_value (BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT -> Word32)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT -> Word32
forall a b. (a -> b) -> a -> b
$
                                                                                                            Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                          (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                              BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
bam_v1_6_bam_alignment_optionalfields_bigiopt
                                                                                                                BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                      )
                                                                                                   | BAM_V1_6_BAM_Alignment_OptionalFields_SumType
SmallSOPT BAM_V1_6_BAM_Alignment_OptionalFields_SumType
-> [BAM_V1_6_BAM_Alignment_OptionalFields_SumType] -> Bool
forall a. Eq a => a -> [a] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`DL.elem` [BAM_V1_6_BAM_Alignment_OptionalFields_SumType]
optionalfieldsl
                                                                                                   -> ( BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT -> ByteString
bam_v1_6_bam_alignment_optionalfields_smallsopt_tag (BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT -> ByteString)
-> BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                          Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                          (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                            BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
bam_v1_6_bam_alignment_optionalfields_smallsopt
                                                                                                              BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                      )
                                                                                                      ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                      ( Word8 -> ByteString
DB.singleton Word8
0x73 --'s'
                                                                                                      )
                                                                                                      ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                      ( Int16 -> ByteString
int16ToByteStringLE                                     (Int16 -> ByteString) -> Int16 -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                          BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT -> Int16
bam_v1_6_bam_alignment_optionalfields_smallsopt_value (BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT -> Int16)
-> BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT -> Int16
forall a b. (a -> b) -> a -> b
$
                                                                                                            Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                            (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                              BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
bam_v1_6_bam_alignment_optionalfields_smallsopt
                                                                                                                BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                      )
                                                                                                   | BAM_V1_6_BAM_Alignment_OptionalFields_SumType
BigSOPT BAM_V1_6_BAM_Alignment_OptionalFields_SumType
-> [BAM_V1_6_BAM_Alignment_OptionalFields_SumType] -> Bool
forall a. Eq a => a -> [a] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`DL.elem` [BAM_V1_6_BAM_Alignment_OptionalFields_SumType]
optionalfieldsl
                                                                                                   -> ( BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT -> ByteString
bam_v1_6_bam_alignment_optionalfields_bigsopt_tag (BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT -> ByteString)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                          Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                        (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                            BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
bam_v1_6_bam_alignment_optionalfields_bigsopt
                                                                                                              BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                      )
                                                                                                      ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                      ( Word8 -> ByteString
DB.singleton Word8
0x53 --'S'
                                                                                                      )
                                                                                                      ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                      ( Word16 -> ByteString
word16ToByteStringLE                                  (Word16 -> ByteString) -> Word16 -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                          BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT -> Word16
bam_v1_6_bam_alignment_optionalfields_bigsopt_value (BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT -> Word16)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT -> Word16
forall a b. (a -> b) -> a -> b
$
                                                                                                            Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                          (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                              BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
bam_v1_6_bam_alignment_optionalfields_bigsopt
                                                                                                                BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                      )
                                                                                                   | BAM_V1_6_BAM_Alignment_OptionalFields_SumType
FOPT BAM_V1_6_BAM_Alignment_OptionalFields_SumType
-> [BAM_V1_6_BAM_Alignment_OptionalFields_SumType] -> Bool
forall a. Eq a => a -> [a] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`DL.elem` [BAM_V1_6_BAM_Alignment_OptionalFields_SumType]
optionalfieldsl
                                                                                                   -> ( BAM_V1_6_BAM_Alignment_OptionalFields_FOPT -> ByteString
bam_v1_6_bam_alignment_optionalfields_fopt_tag (BAM_V1_6_BAM_Alignment_OptionalFields_FOPT -> ByteString)
-> BAM_V1_6_BAM_Alignment_OptionalFields_FOPT -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                          Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                     (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_FOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                            BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
bam_v1_6_bam_alignment_optionalfields_fopt
                                                                                                              BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                      )
                                                                                                      ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                      ( Word8 -> ByteString
DB.singleton Word8
0x66 --'f'
                                                                                                      )
                                                                                                      ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                      ( Word32 -> ByteString
word32ToByteStringLE                               (Word32 -> ByteString) -> Word32 -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                          BAM_V1_6_BAM_Alignment_OptionalFields_FOPT -> Word32
bam_v1_6_bam_alignment_optionalfields_fopt_value (BAM_V1_6_BAM_Alignment_OptionalFields_FOPT -> Word32)
-> BAM_V1_6_BAM_Alignment_OptionalFields_FOPT -> Word32
forall a b. (a -> b) -> a -> b
$
                                                                                                            Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                       (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_FOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                              BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
bam_v1_6_bam_alignment_optionalfields_fopt
                                                                                                                BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                      )
                                                                                                   | BAM_V1_6_BAM_Alignment_OptionalFields_SumType
ZOPT BAM_V1_6_BAM_Alignment_OptionalFields_SumType
-> [BAM_V1_6_BAM_Alignment_OptionalFields_SumType] -> Bool
forall a. Eq a => a -> [a] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`DL.elem` [BAM_V1_6_BAM_Alignment_OptionalFields_SumType]
optionalfieldsl
                                                                                                   -> ( BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT -> ByteString
bam_v1_6_bam_alignment_optionalfields_zopt_tag (BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT -> ByteString)
-> BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                          Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                     (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                            BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
bam_v1_6_bam_alignment_optionalfields_zopt
                                                                                                              BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                      )
                                                                                                      ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                      ( Word8 -> ByteString
DB.singleton Word8
0x5A --'Z'
                                                                                                      )
                                                                                                      ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                      ( [Word8] -> ByteString
DB.pack                                              ([Word8] -> ByteString) -> [Word8] -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                          Seq Word8 -> [Word8]
forall a. Seq a -> [a]
forall (t :: * -> *) a. Foldable t => t a -> [a]
toList                                             (Seq Word8 -> [Word8]) -> Seq Word8 -> [Word8]
forall a b. (a -> b) -> a -> b
$
                                                                                                            BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT -> Seq Word8
bam_v1_6_bam_alignment_optionalfields_zopt_value (BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT -> Seq Word8)
-> BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT -> Seq Word8
forall a b. (a -> b) -> a -> b
$
                                                                                                              Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                       (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                                BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
bam_v1_6_bam_alignment_optionalfields_zopt
                                                                                                                  BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                      )
                                                                                                      ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                      ( Word8 -> ByteString
DB.singleton Word8
0x00
                                                                                                      )
                                                                                                   | BAM_V1_6_BAM_Alignment_OptionalFields_SumType
HOPT BAM_V1_6_BAM_Alignment_OptionalFields_SumType
-> [BAM_V1_6_BAM_Alignment_OptionalFields_SumType] -> Bool
forall a. Eq a => a -> [a] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`DL.elem` [BAM_V1_6_BAM_Alignment_OptionalFields_SumType]
optionalfieldsl
                                                                                                   -> ( BAM_V1_6_BAM_Alignment_OptionalFields_HOPT -> ByteString
bam_v1_6_bam_alignment_optionalfields_hopt_tag (BAM_V1_6_BAM_Alignment_OptionalFields_HOPT -> ByteString)
-> BAM_V1_6_BAM_Alignment_OptionalFields_HOPT -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                          Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                     (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_HOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                            BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
bam_v1_6_bam_alignment_optionalfields_hopt
                                                                                                              BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                      )
                                                                                                      ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                      ( Word8 -> ByteString
DB.singleton Word8
0x48 --'H'
                                                                                                      )
                                                                                                      ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                      ( [ByteString] -> ByteString
DB.concat ([ByteString] -> ByteString) -> [ByteString] -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                          Seq ByteString -> [ByteString]
forall a. Seq a -> [a]
forall (t :: * -> *) a. Foldable t => t a -> [a]
toList
                                                                                                            ( (ByteString -> ByteString) -> Seq ByteString -> Seq ByteString
forall a b. (a -> b) -> Seq a -> Seq b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\ByteString
currenthexvalue ->
                                                                                                                      case ( ByteString -> Bool
DBB16.isBase16 ( Base16 ByteString -> ByteString
forall a. Base16 a -> a
DBB16T.extractBase16 (Base16 ByteString -> ByteString)
-> Base16 ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                                                                ByteString -> Base16 ByteString
DBB16.encodeBase16' ByteString
currenthexvalue
                                                                                                                                            )
                                                                                                                           ) of
                                                                                                                        Bool
False ->
                                                                                                                          [Char] -> ByteString
forall a. HasCallStack => [Char] -> a
error ([Char] -> ByteString) -> [Char] -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                                            BAM_V1_6_Write_Error -> [Char]
forall a. Show a => a -> [Char]
show BAM_V1_6_Write_Error
BAM_V1_6_Write_Error_HOPT_Incorrect_Format
                                                                                                                        Bool
True  ->
                                                                                                                          Base16 ByteString -> ByteString
forall a. Base16 a -> a
DBB16T.extractBase16 (Base16 ByteString -> ByteString)
-> Base16 ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                                            ByteString -> Base16 ByteString
DBB16.encodeBase16' ByteString
currenthexvalue
                                                                                                                   )
                                                                                                              ( BAM_V1_6_BAM_Alignment_OptionalFields_HOPT -> Seq ByteString
bam_v1_6_bam_alignment_optionalfields_hopt_value (BAM_V1_6_BAM_Alignment_OptionalFields_HOPT -> Seq ByteString)
-> BAM_V1_6_BAM_Alignment_OptionalFields_HOPT -> Seq ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                                  Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                       (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_HOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                                    BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
bam_v1_6_bam_alignment_optionalfields_hopt
                                                                                                                      BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                              )
                                                                                                            )
                                                                                                      )
                                                                                                      ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                      ( Word8 -> ByteString
DB.singleton Word8
0x00
                                                                                                      )
                                                                                                   | BAM_V1_6_BAM_Alignment_OptionalFields_SumType
BOPT BAM_V1_6_BAM_Alignment_OptionalFields_SumType
-> [BAM_V1_6_BAM_Alignment_OptionalFields_SumType] -> Bool
forall a. Eq a => a -> [a] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`DL.elem` [BAM_V1_6_BAM_Alignment_OptionalFields_SumType]
optionalfieldsl
                                                                                                   -> do
                                                                                                     let optionalfieldsboptl :: [BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType]
optionalfieldsboptl = [ case ( BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8
bam_v1_6_bam_alignment_optionalfields_bopt_int8 (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8
forall a b. (a -> b) -> a -> b
$
                                                                                                                                          Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                      (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                                                            BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt
                                                                                                                                              BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                                                      ) of
                                                                                                                                   Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8
Nothing ->
                                                                                                                                     BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType
BOPTEmpty
                                                                                                                                   Just BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8
_  ->
                                                                                                                                     BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType
BOPTInt8
                                                                                                                               , case ( BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8
bam_v1_6_bam_alignment_optionalfields_bopt_word8 (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8
forall a b. (a -> b) -> a -> b
$
                                                                                                                                          Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                       (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                                                            BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt
                                                                                                                                              BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                                                      ) of
                                                                                                                                   Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8
Nothing ->
                                                                                                                                     BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType
BOPTEmpty
                                                                                                                                   Just BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8
_  ->
                                                                                                                                     BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType
BOPTWord8
                                                                                                                               , case ( BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16
bam_v1_6_bam_alignment_optionalfields_bopt_int16 (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16
forall a b. (a -> b) -> a -> b
$
                                                                                                                                          Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                       (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                                                            BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt
                                                                                                                                              BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                                                      ) of
                                                                                                                                   Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16
Nothing ->
                                                                                                                                     BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType
BOPTEmpty
                                                                                                                                   Just BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16
_  ->
                                                                                                                                     BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType
BOPTInt16
                                                                                                                               , case ( BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16
bam_v1_6_bam_alignment_optionalfields_bopt_word16 (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16
forall a b. (a -> b) -> a -> b
$
                                                                                                                                          Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                        (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                                                            BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt
                                                                                                                                              BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                                                      ) of
                                                                                                                                   Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16
Nothing ->
                                                                                                                                     BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType
BOPTEmpty
                                                                                                                                   Just BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16
_  ->
                                                                                                                                     BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType
BOPTWord16
                                                                                                                               , case ( BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32
bam_v1_6_bam_alignment_optionalfields_bopt_int32 (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32
forall a b. (a -> b) -> a -> b
$
                                                                                                                                          Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                       (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                                                            BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt
                                                                                                                                              BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                                                      ) of
                                                                                                                                   Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32
Nothing ->
                                                                                                                                     BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType
BOPTEmpty
                                                                                                                                   Just BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32
_  ->
                                                                                                                                     BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType
BOPTInt32
                                                                                                                               , case ( BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32
bam_v1_6_bam_alignment_optionalfields_bopt_word32 (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32
forall a b. (a -> b) -> a -> b
$
                                                                                                                                          Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                        (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                                                            BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt
                                                                                                                                              BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                                                      ) of
                                                                                                                                   Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32
Nothing ->
                                                                                                                                     BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType
BOPTEmpty
                                                                                                                                   Just BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32
_  ->
                                                                                                                                     BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType
BOPTWord32
                                                                                                                               , case ( BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float
bam_v1_6_bam_alignment_optionalfields_bopt_float (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float
forall a b. (a -> b) -> a -> b
$
                                                                                                                                          Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                       (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                                                            BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt
                                                                                                                                              BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                                                      ) of
                                                                                                                                   Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float
Nothing ->
                                                                                                                                     BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType
BOPTEmpty
                                                                                                                                   Just BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float
_  ->
                                                                                                                                     BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType
BOPTFloat
                                                                                                                               ] :: [BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType]
                                                                                                     if | BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType
BOPTInt8 BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType
-> [BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType] -> Bool
forall a. Eq a => a -> [a] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`DL.elem` [BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType]
optionalfieldsboptl
                                                                                                        -> ( BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8 -> ByteString
bam_v1_6_bam_alignment_optionalfields_bopt_int8_tag (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8 -> ByteString)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8 -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                               Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8
forall a. HasCallStack => Maybe a -> a
fromJust                                          (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8
forall a b. (a -> b) -> a -> b
$
                                                                                                                 BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8
bam_v1_6_bam_alignment_optionalfields_bopt_int8 (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8
forall a b. (a -> b) -> a -> b
$
                                                                                                                   Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                      (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                                     BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt
                                                                                                                       BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                           )
                                                                                                           ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                           ( Word8 -> ByteString
DB.singleton Word8
0x42 --'B'
                                                                                                           )
                                                                                                           ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                           ( BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8 -> ByteString
bam_v1_6_bam_alignment_optionalfields_bopt_int8_type (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8 -> ByteString)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8 -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                               Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8
forall a. HasCallStack => Maybe a -> a
fromJust                                           (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8
forall a b. (a -> b) -> a -> b
$
                                                                                                                 BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8
bam_v1_6_bam_alignment_optionalfields_bopt_int8  (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8
forall a b. (a -> b) -> a -> b
$
                                                                                                                   Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                       (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                                     BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt
                                                                                                                       BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                           )
                                                                                                           ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                           ( Word32 -> ByteString
word32ToByteStringLE                                    (Word32 -> ByteString) -> Word32 -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                               BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8 -> Word32
bam_v1_6_bam_alignment_optionalfields_bopt_int8_count (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8 -> Word32)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8 -> Word32
forall a b. (a -> b) -> a -> b
$
                                                                                                                 Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8
forall a. HasCallStack => Maybe a -> a
fromJust                                            (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8
forall a b. (a -> b) -> a -> b
$
                                                                                                                   BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8
bam_v1_6_bam_alignment_optionalfields_bopt_int8   (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8
forall a b. (a -> b) -> a -> b
$
                                                                                                                     Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                        (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                                       BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt
                                                                                                                         BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                           )
                                                                                                           ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                           ( [ByteString] -> ByteString
DB.concat ([ByteString] -> ByteString) -> [ByteString] -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                               Seq ByteString -> [ByteString]
forall a. Seq a -> [a]
forall (t :: * -> *) a. Foldable t => t a -> [a]
toList
                                                                                                                 ( (Int8 -> ByteString) -> Seq Int8 -> Seq ByteString
forall a b. (a -> b) -> Seq a -> Seq b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\Int8
currentint8value ->
                                                                                                                           Int8 -> ByteString
int8ToByteString Int8
currentint8value
                                                                                                                        )
                                                                                                                   ( BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8 -> Seq Int8
bam_v1_6_bam_alignment_optionalfields_bopt_int8_value (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8 -> Seq Int8)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8 -> Seq Int8
forall a b. (a -> b) -> a -> b
$
                                                                                                                       Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8
forall a. HasCallStack => Maybe a -> a
fromJust                                            (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8
forall a b. (a -> b) -> a -> b
$
                                                                                                                         BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8
bam_v1_6_bam_alignment_optionalfields_bopt_int8   (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int8
forall a b. (a -> b) -> a -> b
$
                                                                                                                           Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                        (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                                             BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt
                                                                                                                                BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield 
                                                                                                                   )
                                                                                                                 )
                                                                                                           )
                                                                                                        | BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType
BOPTWord8 BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType
-> [BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType] -> Bool
forall a. Eq a => a -> [a] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`DL.elem` [BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType]
optionalfieldsboptl
                                                                                                        -> ( BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8 -> ByteString
bam_v1_6_bam_alignment_optionalfields_bopt_word8_tag (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8 -> ByteString)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8 -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                               Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8
forall a. HasCallStack => Maybe a -> a
fromJust                                           (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8
forall a b. (a -> b) -> a -> b
$
                                                                                                                 BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8
bam_v1_6_bam_alignment_optionalfields_bopt_word8 (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8
forall a b. (a -> b) -> a -> b
$
                                                                                                                   Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                       (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                                     BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt
                                                                                                                       BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                           )
                                                                                                           ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                           ( Word8 -> ByteString
DB.singleton Word8
0x42 --'B'
                                                                                                           )
                                                                                                           ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                           ( BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8 -> ByteString
bam_v1_6_bam_alignment_optionalfields_bopt_word8_type (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8 -> ByteString)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8 -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                               Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8
forall a. HasCallStack => Maybe a -> a
fromJust                                            (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8
forall a b. (a -> b) -> a -> b
$
                                                                                                                 BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8
bam_v1_6_bam_alignment_optionalfields_bopt_word8  (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8
forall a b. (a -> b) -> a -> b
$
                                                                                                                   Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                        (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                                     BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt
                                                                                                                       BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                           )
                                                                                                           ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                           ( Word32 -> ByteString
word32ToByteStringLE                                     (Word32 -> ByteString) -> Word32 -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                               BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8 -> Word32
bam_v1_6_bam_alignment_optionalfields_bopt_word8_count (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8 -> Word32)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8 -> Word32
forall a b. (a -> b) -> a -> b
$
                                                                                                                 Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8
forall a. HasCallStack => Maybe a -> a
fromJust                                             (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8
forall a b. (a -> b) -> a -> b
$
                                                                                                                   BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8
bam_v1_6_bam_alignment_optionalfields_bopt_word8   (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8
forall a b. (a -> b) -> a -> b
$
                                                                                                                     Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                         (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                                       BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt
                                                                                                                         BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                           )
                                                                                                           ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                           ( [ByteString] -> ByteString
DB.concat ([ByteString] -> ByteString) -> [ByteString] -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                               Seq ByteString -> [ByteString]
forall a. Seq a -> [a]
forall (t :: * -> *) a. Foldable t => t a -> [a]
toList
                                                                                                                 ( (Word8 -> ByteString) -> Seq Word8 -> Seq ByteString
forall a b. (a -> b) -> Seq a -> Seq b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\Word8
currentword8value ->
                                                                                                                           Word8 -> ByteString
DB.singleton Word8
currentword8value
                                                                                                                        )
                                                                                                                   ( BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8 -> Seq Word8
bam_v1_6_bam_alignment_optionalfields_bopt_word8_value (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8 -> Seq Word8)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8 -> Seq Word8
forall a b. (a -> b) -> a -> b
$
                                                                                                                       Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8
forall a. HasCallStack => Maybe a -> a
fromJust                                             (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8
forall a b. (a -> b) -> a -> b
$
                                                                                                                         BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8
bam_v1_6_bam_alignment_optionalfields_bopt_word8   (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word8
forall a b. (a -> b) -> a -> b
$
                                                                                                                           Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                         (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                                             BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt
                                                                                                                               BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                                   )
                                                                                                                 )
                                                                                                           )
                                                                                                        | BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType
BOPTInt16 BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType
-> [BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType] -> Bool
forall a. Eq a => a -> [a] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`DL.elem` [BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType]
optionalfieldsboptl
                                                                                                        -> ( BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16 -> ByteString
bam_v1_6_bam_alignment_optionalfields_bopt_int16_tag (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16 -> ByteString)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16 -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                               Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16
forall a. HasCallStack => Maybe a -> a
fromJust                                           (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16
forall a b. (a -> b) -> a -> b
$
                                                                                                                 BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16
bam_v1_6_bam_alignment_optionalfields_bopt_int16 (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16
forall a b. (a -> b) -> a -> b
$
                                                                                                                   Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                       (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                                     BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt
                                                                                                                       BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                           )
                                                                                                           ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                           ( Word8 -> ByteString
DB.singleton Word8
0x42 --'B'
                                                                                                           )
                                                                                                           ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                           ( BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16 -> ByteString
bam_v1_6_bam_alignment_optionalfields_bopt_int16_type (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16 -> ByteString)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16 -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                               Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16
forall a. HasCallStack => Maybe a -> a
fromJust                                            (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16
forall a b. (a -> b) -> a -> b
$
                                                                                                                 BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16
bam_v1_6_bam_alignment_optionalfields_bopt_int16  (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16
forall a b. (a -> b) -> a -> b
$
                                                                                                                   Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                        (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                                     BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt
                                                                                                                       BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                           )
                                                                                                           ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                           ( Word32 -> ByteString
word32ToByteStringLE                                     (Word32 -> ByteString) -> Word32 -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                               BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16 -> Word32
bam_v1_6_bam_alignment_optionalfields_bopt_int16_count (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16 -> Word32)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16 -> Word32
forall a b. (a -> b) -> a -> b
$
                                                                                                                 Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16
forall a. HasCallStack => Maybe a -> a
fromJust                                             (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16
forall a b. (a -> b) -> a -> b
$
                                                                                                                   BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16
bam_v1_6_bam_alignment_optionalfields_bopt_int16   (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16
forall a b. (a -> b) -> a -> b
$
                                                                                                                     Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                         (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                                       BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt
                                                                                                                         BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                           )
                                                                                                           ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                           ( [ByteString] -> ByteString
DB.concat ([ByteString] -> ByteString) -> [ByteString] -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                               Seq ByteString -> [ByteString]
forall a. Seq a -> [a]
forall (t :: * -> *) a. Foldable t => t a -> [a]
toList
                                                                                                                 ( (Int16 -> ByteString) -> Seq Int16 -> Seq ByteString
forall a b. (a -> b) -> Seq a -> Seq b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\Int16
currentint16value ->
                                                                                                                          Int16 -> ByteString
int16ToByteStringLE Int16
currentint16value
                                                                                                                       )
                                                                                                                   ( BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16 -> Seq Int16
bam_v1_6_bam_alignment_optionalfields_bopt_int16_value (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16 -> Seq Int16)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16 -> Seq Int16
forall a b. (a -> b) -> a -> b
$
                                                                                                                       Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16
forall a. HasCallStack => Maybe a -> a
fromJust                                             (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16
forall a b. (a -> b) -> a -> b
$
                                                                                                                         BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16
bam_v1_6_bam_alignment_optionalfields_bopt_int16   (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int16
forall a b. (a -> b) -> a -> b
$
                                                                                                                           Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                         (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                                             BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt
                                                                                                                               BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                                   )
                                                                                                                 )
                                                                                                           )
                                                                                                        | BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType
BOPTWord16 BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType
-> [BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType] -> Bool
forall a. Eq a => a -> [a] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`DL.elem` [BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType]
optionalfieldsboptl
                                                                                                        -> ( BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16 -> ByteString
bam_v1_6_bam_alignment_optionalfields_bopt_word16_tag (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16 -> ByteString)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16 -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                               Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16
forall a. HasCallStack => Maybe a -> a
fromJust                                            (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16
forall a b. (a -> b) -> a -> b
$
                                                                                                                 BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16
bam_v1_6_bam_alignment_optionalfields_bopt_word16 (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16
forall a b. (a -> b) -> a -> b
$
                                                                                                                   Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                        (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                                     BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt
                                                                                                                       BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                           )
                                                                                                           ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                           ( Word8 -> ByteString
DB.singleton Word8
0x42 --'B'
                                                                                                           )
                                                                                                           ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                           ( BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16 -> ByteString
bam_v1_6_bam_alignment_optionalfields_bopt_word16_type (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16 -> ByteString)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16 -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                               Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16
forall a. HasCallStack => Maybe a -> a
fromJust                                             (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16
forall a b. (a -> b) -> a -> b
$
                                                                                                                 BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16
bam_v1_6_bam_alignment_optionalfields_bopt_word16  (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16
forall a b. (a -> b) -> a -> b
$
                                                                                                                   Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                         (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                                     BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt
                                                                                                                       BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                           )
                                                                                                           ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                           ( Word32 -> ByteString
word32ToByteStringLE                                      (Word32 -> ByteString) -> Word32 -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                               BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16 -> Word32
bam_v1_6_bam_alignment_optionalfields_bopt_word16_count (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16 -> Word32)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16 -> Word32
forall a b. (a -> b) -> a -> b
$
                                                                                                                 Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16
forall a. HasCallStack => Maybe a -> a
fromJust                                              (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16
forall a b. (a -> b) -> a -> b
$
                                                                                                                   BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16
bam_v1_6_bam_alignment_optionalfields_bopt_word16   (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16
forall a b. (a -> b) -> a -> b
$
                                                                                                                     Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                          (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                                       BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt
                                                                                                                         BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                           )
                                                                                                           ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                           ( [ByteString] -> ByteString
DB.concat ([ByteString] -> ByteString) -> [ByteString] -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                               Seq ByteString -> [ByteString]
forall a. Seq a -> [a]
forall (t :: * -> *) a. Foldable t => t a -> [a]
toList
                                                                                                                 ( (Word16 -> ByteString) -> Seq Word16 -> Seq ByteString
forall a b. (a -> b) -> Seq a -> Seq b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\Word16
currentword16value ->
                                                                                                                           Word16 -> ByteString
word16ToByteStringLE Word16
currentword16value
                                                                                                                        )
                                                                                                                   ( BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16 -> Seq Word16
bam_v1_6_bam_alignment_optionalfields_bopt_word16_value (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16 -> Seq Word16)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16 -> Seq Word16
forall a b. (a -> b) -> a -> b
$
                                                                                                                       Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16
forall a. HasCallStack => Maybe a -> a
fromJust                                              (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16
forall a b. (a -> b) -> a -> b
$
                                                                                                                         BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16
bam_v1_6_bam_alignment_optionalfields_bopt_word16   (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word16
forall a b. (a -> b) -> a -> b
$
                                                                                                                           Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                          (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                                             BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt
                                                                                                                                BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                                   )
                                                                                                                 )
                                                                                                           )
                                                                                                        | BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType
BOPTInt32 BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType
-> [BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType] -> Bool
forall a. Eq a => a -> [a] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`DL.elem` [BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType]
optionalfieldsboptl
                                                                                                        -> ( BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32 -> ByteString
bam_v1_6_bam_alignment_optionalfields_bopt_int32_tag (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32 -> ByteString)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32 -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                               Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32
forall a. HasCallStack => Maybe a -> a
fromJust                                           (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32
forall a b. (a -> b) -> a -> b
$
                                                                                                                 BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32
bam_v1_6_bam_alignment_optionalfields_bopt_int32 (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32
forall a b. (a -> b) -> a -> b
$
                                                                                                                   Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                       (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                                     BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt
                                                                                                                       BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                           )
                                                                                                           ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                           ( Word8 -> ByteString
DB.singleton Word8
0x42 --'B'
                                                                                                           )
                                                                                                           ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                           ( BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32 -> ByteString
bam_v1_6_bam_alignment_optionalfields_bopt_int32_type (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32 -> ByteString)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32 -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                               Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32
forall a. HasCallStack => Maybe a -> a
fromJust                                            (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32
forall a b. (a -> b) -> a -> b
$
                                                                                                                 BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32
bam_v1_6_bam_alignment_optionalfields_bopt_int32  (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32
forall a b. (a -> b) -> a -> b
$
                                                                                                                   Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                        (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                                     BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt
                                                                                                                       BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                           )
                                                                                                           ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                           ( Word32 -> ByteString
word32ToByteStringLE                                     (Word32 -> ByteString) -> Word32 -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                               BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32 -> Word32
bam_v1_6_bam_alignment_optionalfields_bopt_int32_count (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32 -> Word32)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32 -> Word32
forall a b. (a -> b) -> a -> b
$
                                                                                                                 Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32
forall a. HasCallStack => Maybe a -> a
fromJust                                             (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32
forall a b. (a -> b) -> a -> b
$
                                                                                                                   BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32
bam_v1_6_bam_alignment_optionalfields_bopt_int32   (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32
forall a b. (a -> b) -> a -> b
$
                                                                                                                     Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                         (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                                       BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt
                                                                                                                         BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                           )
                                                                                                           ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                           ( [ByteString] -> ByteString
DB.concat ([ByteString] -> ByteString) -> [ByteString] -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                               Seq ByteString -> [ByteString]
forall a. Seq a -> [a]
forall (t :: * -> *) a. Foldable t => t a -> [a]
toList
                                                                                                                 ( (Int32 -> ByteString) -> Seq Int32 -> Seq ByteString
forall a b. (a -> b) -> Seq a -> Seq b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\Int32
currentint32value ->
                                                                                                                          Int32 -> ByteString
int32ToByteStringLE Int32
currentint32value
                                                                                                                       )
                                                                                                                   ( BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32 -> Seq Int32
bam_v1_6_bam_alignment_optionalfields_bopt_int32_value (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32 -> Seq Int32)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32 -> Seq Int32
forall a b. (a -> b) -> a -> b
$
                                                                                                                       Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32
forall a. HasCallStack => Maybe a -> a
fromJust                                             (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32
forall a b. (a -> b) -> a -> b
$
                                                                                                                         BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32
bam_v1_6_bam_alignment_optionalfields_bopt_int32   (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Int32
forall a b. (a -> b) -> a -> b
$
                                                                                                                           Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                         (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                                             BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt
                                                                                                                               BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                                   )
                                                                                                                 )
                                                                                                           )
                                                                                                        | BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType
BOPTWord32 BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType
-> [BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType] -> Bool
forall a. Eq a => a -> [a] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`DL.elem` [BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType]
optionalfieldsboptl
                                                                                                        -> ( BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32 -> ByteString
bam_v1_6_bam_alignment_optionalfields_bopt_word32_tag (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32 -> ByteString)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32 -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                               Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32
forall a. HasCallStack => Maybe a -> a
fromJust                                            (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32
forall a b. (a -> b) -> a -> b
$
                                                                                                                 BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32
bam_v1_6_bam_alignment_optionalfields_bopt_word32 (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32
forall a b. (a -> b) -> a -> b
$
                                                                                                                   Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                        (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                                     BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt
                                                                                                                       BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                           )
                                                                                                           ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                           ( Word8 -> ByteString
DB.singleton Word8
0x42 --'B'
                                                                                                           )
                                                                                                           ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                           ( BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32 -> ByteString
bam_v1_6_bam_alignment_optionalfields_bopt_word32_type (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32 -> ByteString)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32 -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                               Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32
forall a. HasCallStack => Maybe a -> a
fromJust                                             (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32
forall a b. (a -> b) -> a -> b
$
                                                                                                                 BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32
bam_v1_6_bam_alignment_optionalfields_bopt_word32  (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32
forall a b. (a -> b) -> a -> b
$
                                                                                                                   Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                         (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                                     BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt
                                                                                                                       BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                           )
                                                                                                           ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                           ( Word32 -> ByteString
word32ToByteStringLE                                      (Word32 -> ByteString) -> Word32 -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                               BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32 -> Word32
bam_v1_6_bam_alignment_optionalfields_bopt_word32_count (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32 -> Word32)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32 -> Word32
forall a b. (a -> b) -> a -> b
$
                                                                                                                 Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32
forall a. HasCallStack => Maybe a -> a
fromJust                                              (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32
forall a b. (a -> b) -> a -> b
$
                                                                                                                   BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32
bam_v1_6_bam_alignment_optionalfields_bopt_word32   (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32
forall a b. (a -> b) -> a -> b
$
                                                                                                                     Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                          (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                                       BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt
                                                                                                                         BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                           )
                                                                                                           ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                           ( [ByteString] -> ByteString
DB.concat ([ByteString] -> ByteString) -> [ByteString] -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                               Seq ByteString -> [ByteString]
forall a. Seq a -> [a]
forall (t :: * -> *) a. Foldable t => t a -> [a]
toList
                                                                                                                 ( (Word32 -> ByteString) -> Seq Word32 -> Seq ByteString
forall a b. (a -> b) -> Seq a -> Seq b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\Word32
currentword32value ->
                                                                                                                          Word32 -> ByteString
word32ToByteStringLE Word32
currentword32value
                                                                                                                       )
                                                                                                                   ( BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32 -> Seq Word32
bam_v1_6_bam_alignment_optionalfields_bopt_word32_value (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32 -> Seq Word32)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32 -> Seq Word32
forall a b. (a -> b) -> a -> b
$
                                                                                                                       Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32
forall a. HasCallStack => Maybe a -> a
fromJust                                              (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32
forall a b. (a -> b) -> a -> b
$
                                                                                                                         BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32
bam_v1_6_bam_alignment_optionalfields_bopt_word32   (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Word32
forall a b. (a -> b) -> a -> b
$
                                                                                                                           Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                          (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                                             BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt
                                                                                                                               BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                                   )
                                                                                                                 )
                                                                                                           )
                                                                                                        | BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType
BOPTFloat BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType
-> [BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType] -> Bool
forall a. Eq a => a -> [a] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`DL.elem` [BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType]
optionalfieldsboptl
                                                                                                        -> ( BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float -> ByteString
bam_v1_6_bam_alignment_optionalfields_bopt_float_tag (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float -> ByteString)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                               Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float
forall a. HasCallStack => Maybe a -> a
fromJust                                           (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float
forall a b. (a -> b) -> a -> b
$
                                                                                                                 BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float
bam_v1_6_bam_alignment_optionalfields_bopt_float (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float
forall a b. (a -> b) -> a -> b
$
                                                                                                                   Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                       (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                                     BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt
                                                                                                                       BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                           )
                                                                                                           ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                           ( Word8 -> ByteString
DB.singleton Word8
0x42 --'B'
                                                                                                           )
                                                                                                           ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                           ( BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float -> ByteString
bam_v1_6_bam_alignment_optionalfields_bopt_float_type (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float -> ByteString)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                               Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float
forall a. HasCallStack => Maybe a -> a
fromJust                                            (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float
forall a b. (a -> b) -> a -> b
$
                                                                                                                 BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float
bam_v1_6_bam_alignment_optionalfields_bopt_float  (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float
forall a b. (a -> b) -> a -> b
$
                                                                                                                   Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                        (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                                     BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt
                                                                                                                       BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                           )
                                                                                                           ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                           ( Word32 -> ByteString
word32ToByteStringLE                                     (Word32 -> ByteString) -> Word32 -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                               BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float -> Word32
bam_v1_6_bam_alignment_optionalfields_bopt_float_count (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float -> Word32)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float -> Word32
forall a b. (a -> b) -> a -> b
$
                                                                                                                 Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float
forall a. HasCallStack => Maybe a -> a
fromJust                                             (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float
forall a b. (a -> b) -> a -> b
$
                                                                                                                   BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float
bam_v1_6_bam_alignment_optionalfields_bopt_float   (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float
forall a b. (a -> b) -> a -> b
$
                                                                                                                     Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                         (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                                       BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt
                                                                                                                         BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                           )
                                                                                                           ByteString -> ByteString -> ByteString
`DB.append`
                                                                                                           ( [ByteString] -> ByteString
DB.concat ([ByteString] -> ByteString) -> [ByteString] -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                                               Seq ByteString -> [ByteString]
forall a. Seq a -> [a]
forall (t :: * -> *) a. Foldable t => t a -> [a]
toList
                                                                                                                 ( (Float -> ByteString) -> Seq Float -> Seq ByteString
forall a b. (a -> b) -> Seq a -> Seq b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\Float
currentfloatvalue ->
                                                                                                                          Float -> ByteString
floatToByteStringLE Float
currentfloatvalue
                                                                                                                       )
                                                                                                                   ( BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float -> Seq Float
bam_v1_6_bam_alignment_optionalfields_bopt_float_value (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float -> Seq Float)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float -> Seq Float
forall a b. (a -> b) -> a -> b
$
                                                                                                                       Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float
forall a. HasCallStack => Maybe a -> a
fromJust                                             (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float
forall a b. (a -> b) -> a -> b
$
                                                                                                                         BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float
bam_v1_6_bam_alignment_optionalfields_bopt_float   (BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float)
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_Float
forall a b. (a -> b) -> a -> b
$
                                                                                                                           Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. HasCallStack => Maybe a -> a
fromJust                                         (Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
 -> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT)
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a b. (a -> b) -> a -> b
$
                                                                                                                             BAM_V1_6_BAM_Alignment_OptionalFields
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt
                                                                                                                               BAM_V1_6_BAM_Alignment_OptionalFields
currentbamalignmentoptionalfield
                                                                                                                   )
                                                                                                                 )
                                                                                                           )
                                                                                                        | BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType
BOPTEmpty BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType
-> [BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType] -> Bool
forall a. Eq a => a -> [a] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`DL.elem` [BAM_V1_6_BAM_Alignment_OptionalFields_BOPT_SumType]
optionalfieldsboptl
                                                                                                        -> ByteString
DB.empty
                                                                                                        | Bool
otherwise
                                                                                                        -> ByteString
DB.empty
                                                                                                   | BAM_V1_6_BAM_Alignment_OptionalFields_SumType
Empty BAM_V1_6_BAM_Alignment_OptionalFields_SumType
-> [BAM_V1_6_BAM_Alignment_OptionalFields_SumType] -> Bool
forall a. Eq a => a -> [a] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`DL.elem` [BAM_V1_6_BAM_Alignment_OptionalFields_SumType]
optionalfieldsl
                                                                                                   -> ByteString
DB.empty
                                                                                                   | Bool
otherwise
                                                                                                   -> ByteString
DB.empty 
                                                                                             )
                                                                                        ( BAM_V1_6_BAM_Alignment -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
bam_v1_6_bam_alignment_optionalfields BAM_V1_6_BAM_Alignment
currentbamalignmentrecord
                                                                                        )
                                                               ByteString
preoptionalfields ByteString -> ByteString -> ByteString
`DB.append` ByteString
optionalfields
                                                            )
                                                       ( BAM_V1_6_BAM_BAMAlignments -> Seq BAM_V1_6_BAM_Alignment
bam_v1_6_bam_bamalignments_alignments BAM_V1_6_BAM_BAMAlignments
bam_v1_6_bam_bamalignments'
                                                       )
                let bam_v1_6_bam_bamalignments''' :: ByteString
bam_v1_6_bam_bamalignments''' = ByteString -> ByteString
DB.toStrict        (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                      ByteString -> ByteString
CCZlibR.compress (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                        ByteString -> ByteString
DB.fromStrict  (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                          [ByteString] -> ByteString
DB.concat    ([ByteString] -> ByteString) -> [ByteString] -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                            Seq ByteString -> [ByteString]
forall a. Seq a -> [a]
forall (t :: * -> *) a. Foldable t => t a -> [a]
toList Seq ByteString
bam_v1_6_bam_bamalignments''
                -- total Block SIZE minus 1.
                ()
_ <-
                  Handle -> ByteString -> IO ()
DB.hPutStr Handle
h                    (ByteString -> IO ()) -> ByteString -> IO ()
forall a b. (a -> b) -> a -> b
$
                             Word16 -> ByteString
word16ToByteStringLE (Word16 -> ByteString) -> Word16 -> ByteString
forall a b. (a -> b) -> a -> b
$
                             Int -> Word16
intToWord16LE ((ByteString -> Int
DB.length ByteString
bam_v1_6_bam_bamalignments''' Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
26) Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1)
                -- Write the BAM alignment(s).
                ()
_ <-
                  Handle -> ByteString -> IO ()
DB.hPutStr Handle
h
                             ByteString
bam_v1_6_bam_bamalignments'''
                -- CRC-32.
                ()
_ <-
                  Handle -> ByteString -> IO ()
DB.hPutStr Handle
h           (ByteString -> IO ()) -> ByteString -> IO ()
forall a b. (a -> b) -> a -> b
$
                    Word32 -> ByteString
word32ToByteStringLE (Word32 -> ByteString) -> Word32 -> ByteString
forall a b. (a -> b) -> a -> b
$
                      ByteString -> Word32
forall a. CRC32 a => a -> Word32
DDCRC32.crc32      (ByteString -> Word32) -> ByteString -> Word32
forall a b. (a -> b) -> a -> b
$
                        [ByteString] -> ByteString
DB.concat        ([ByteString] -> ByteString) -> [ByteString] -> ByteString
forall a b. (a -> b) -> a -> b
$
                          Seq ByteString -> [ByteString]
forall a. Seq a -> [a]
forall (t :: * -> *) a. Foldable t => t a -> [a]
toList Seq ByteString
bam_v1_6_bam_bamalignments''
                -- Input SIZE (length of uncompressed data).
                Handle -> ByteString -> IO ()
DB.hPutStr Handle
h                    (ByteString -> IO ()) -> ByteString -> IO ()
forall a b. (a -> b) -> a -> b
$
                           Word32 -> ByteString
word32ToByteStringLE (Word32 -> ByteString) -> Word32 -> ByteString
forall a b. (a -> b) -> a -> b
$
                             Int -> Word32
intToWord32LE      (Int -> Word32) -> Int -> Word32
forall a b. (a -> b) -> a -> b
$
                               ByteString -> Int
DB.length        (ByteString -> Int) -> ByteString -> Int
forall a b. (a -> b) -> a -> b
$
                                 [ByteString] -> ByteString
DB.concat      ([ByteString] -> ByteString) -> [ByteString] -> ByteString
forall a b. (a -> b) -> a -> b
$
                                   Seq ByteString -> [ByteString]
forall a. Seq a -> [a]
forall (t :: * -> *) a. Foldable t => t a -> [a]
toList Seq ByteString
bam_v1_6_bam_bamalignments''
          Just BAM_V1_6_BAM_BAMHeader
bam_v1_6_bam_bamheader' -> do
            -- Write to file.
            -- GZip header.
            ()
_ <-
              Handle -> ByteString -> IO ()
DB.hPutStr Handle
h                                        (ByteString -> IO ()) -> ByteString -> IO ()
forall a b. (a -> b) -> a -> b
$
                         Word8 -> ByteString
DB.singleton                             (Word8 -> ByteString) -> Word8 -> ByteString
forall a b. (a -> b) -> a -> b
$
                           BAM_V1_6_GZipHeader -> Word8
bam_v1_6_gzip_header_gzip_identifier_1 (BAM_V1_6_GZipHeader -> Word8) -> BAM_V1_6_GZipHeader -> Word8
forall a b. (a -> b) -> a -> b
$
                             BAM_V1_6_BGZFBlock -> BAM_V1_6_GZipHeader
bam_v1_6_bgzfblock_gzip_header BAM_V1_6_BGZFBlock
currentbgzfblock
            ()
_ <-
              Handle -> ByteString -> IO ()
DB.hPutStr Handle
h                                        (ByteString -> IO ()) -> ByteString -> IO ()
forall a b. (a -> b) -> a -> b
$
                         Word8 -> ByteString
DB.singleton                             (Word8 -> ByteString) -> Word8 -> ByteString
forall a b. (a -> b) -> a -> b
$
                           BAM_V1_6_GZipHeader -> Word8
bam_v1_6_gzip_header_gzip_identifier_2 (BAM_V1_6_GZipHeader -> Word8) -> BAM_V1_6_GZipHeader -> Word8
forall a b. (a -> b) -> a -> b
$
                             BAM_V1_6_BGZFBlock -> BAM_V1_6_GZipHeader
bam_v1_6_bgzfblock_gzip_header BAM_V1_6_BGZFBlock
currentbgzfblock
            ()
_ <-
              Handle -> ByteString -> IO ()
DB.hPutStr Handle
h                                         (ByteString -> IO ()) -> ByteString -> IO ()
forall a b. (a -> b) -> a -> b
$
                         Word8 -> ByteString
DB.singleton                              (Word8 -> ByteString) -> Word8 -> ByteString
forall a b. (a -> b) -> a -> b
$
                           BAM_V1_6_GZipHeader -> Word8
bam_v1_6_gzip_header_compression_method (BAM_V1_6_GZipHeader -> Word8) -> BAM_V1_6_GZipHeader -> Word8
forall a b. (a -> b) -> a -> b
$
                             BAM_V1_6_BGZFBlock -> BAM_V1_6_GZipHeader
bam_v1_6_bgzfblock_gzip_header BAM_V1_6_BGZFBlock
currentbgzfblock
            ()
_ <-
              Handle -> ByteString -> IO ()
DB.hPutStr Handle
h                                   (ByteString -> IO ()) -> ByteString -> IO ()
forall a b. (a -> b) -> a -> b
$
                         Word8 -> ByteString
DB.singleton                        (Word8 -> ByteString) -> Word8 -> ByteString
forall a b. (a -> b) -> a -> b
$
                           BAM_V1_6_GZipHeader -> Word8
bam_v1_6_gzip_header_header_flags (BAM_V1_6_GZipHeader -> Word8) -> BAM_V1_6_GZipHeader -> Word8
forall a b. (a -> b) -> a -> b
$
                             BAM_V1_6_BGZFBlock -> BAM_V1_6_GZipHeader
bam_v1_6_bgzfblock_gzip_header BAM_V1_6_BGZFBlock
currentbgzfblock
            ()
_ <-
              Handle -> ByteString -> IO ()
DB.hPutStr Handle
h                                        (ByteString -> IO ()) -> ByteString -> IO ()
forall a b. (a -> b) -> a -> b
$
                         Word32 -> ByteString
word32ToByteStringLE                     (Word32 -> ByteString) -> Word32 -> ByteString
forall a b. (a -> b) -> a -> b
$
                           BAM_V1_6_GZipHeader -> Word32
bam_v1_6_gzip_header_modification_time (BAM_V1_6_GZipHeader -> Word32) -> BAM_V1_6_GZipHeader -> Word32
forall a b. (a -> b) -> a -> b
$
                             BAM_V1_6_BGZFBlock -> BAM_V1_6_GZipHeader
bam_v1_6_bgzfblock_gzip_header BAM_V1_6_BGZFBlock
currentbgzfblock
            ()
_ <-
              Handle -> ByteString -> IO ()
DB.hPutStr Handle
h                                  (ByteString -> IO ()) -> ByteString -> IO ()
forall a b. (a -> b) -> a -> b
$
                         Word8 -> ByteString
DB.singleton                       (Word8 -> ByteString) -> Word8 -> ByteString
forall a b. (a -> b) -> a -> b
$
                           BAM_V1_6_GZipHeader -> Word8
bam_v1_6_gzip_header_extra_flags (BAM_V1_6_GZipHeader -> Word8) -> BAM_V1_6_GZipHeader -> Word8
forall a b. (a -> b) -> a -> b
$
                             BAM_V1_6_BGZFBlock -> BAM_V1_6_GZipHeader
bam_v1_6_bgzfblock_gzip_header BAM_V1_6_BGZFBlock
currentbgzfblock
            ()
_ <-
              Handle -> ByteString -> IO ()
DB.hPutStr Handle
h                                       (ByteString -> IO ()) -> ByteString -> IO ()
forall a b. (a -> b) -> a -> b
$
                         Word8 -> ByteString
DB.singleton                            (Word8 -> ByteString) -> Word8 -> ByteString
forall a b. (a -> b) -> a -> b
$
                           BAM_V1_6_GZipHeader -> Word8
bam_v1_6_gzip_header_operating_system (BAM_V1_6_GZipHeader -> Word8) -> BAM_V1_6_GZipHeader -> Word8
forall a b. (a -> b) -> a -> b
$
                            BAM_V1_6_BGZFBlock -> BAM_V1_6_GZipHeader
bam_v1_6_bgzfblock_gzip_header BAM_V1_6_BGZFBlock
currentbgzfblock   
            ()
_ <-
              Handle -> ByteString -> IO ()
DB.hPutStr Handle
h                                   (ByteString -> IO ()) -> ByteString -> IO ()
forall a b. (a -> b) -> a -> b
$
                         Word16 -> ByteString
word16ToByteStringLE                (Word16 -> ByteString) -> Word16 -> ByteString
forall a b. (a -> b) -> a -> b
$
                           BAM_V1_6_GZipHeader -> Word16
bam_v1_6_gzip_header_extra_length (BAM_V1_6_GZipHeader -> Word16) -> BAM_V1_6_GZipHeader -> Word16
forall a b. (a -> b) -> a -> b
$
                             BAM_V1_6_BGZFBlock -> BAM_V1_6_GZipHeader
bam_v1_6_bgzfblock_gzip_header BAM_V1_6_BGZFBlock
currentbgzfblock
            -- Subfield Identifier 1.
            ()
_ <-
              Handle -> ByteString -> IO ()
DB.hPutStr Handle
h            (ByteString -> IO ()) -> ByteString -> IO ()
forall a b. (a -> b) -> a -> b
$
                         Word8 -> ByteString
DB.singleton (Word8 -> ByteString) -> Word8 -> ByteString
forall a b. (a -> b) -> a -> b
$
                           BAM_V1_6_BGZFBlock -> Word8
bam_v1_6_bgzfblock_subfield_identifier_one BAM_V1_6_BGZFBlock
currentbgzfblock
            -- Subfield Identifier 2.
            ()
_ <-
              Handle -> ByteString -> IO ()
DB.hPutStr Handle
h            (ByteString -> IO ()) -> ByteString -> IO ()
forall a b. (a -> b) -> a -> b
$
                         Word8 -> ByteString
DB.singleton (Word8 -> ByteString) -> Word8 -> ByteString
forall a b. (a -> b) -> a -> b
$
                           BAM_V1_6_BGZFBlock -> Word8
bam_v1_6_bgzfblock_subfield_identifier_two BAM_V1_6_BGZFBlock
currentbgzfblock
            -- Subfield LENgth.
            ()
_ <-
              Handle -> ByteString -> IO ()
DB.hPutStr Handle
h                    (ByteString -> IO ()) -> ByteString -> IO ()
forall a b. (a -> b) -> a -> b
$
                         Word16 -> ByteString
word16ToByteStringLE (Word16 -> ByteString) -> Word16 -> ByteString
forall a b. (a -> b) -> a -> b
$
                           BAM_V1_6_BGZFBlock -> Word16
bam_v1_6_bgzfblock_subfield_length BAM_V1_6_BGZFBlock
currentbgzfblock
            let bam_v1_6_bam_bamheader'' :: ByteString
bam_v1_6_bam_bamheader'' = BAM_V1_6_BAM_BAMHeader -> ByteString
bam_v1_6_bam_bamheader_magic BAM_V1_6_BAM_BAMHeader
bam_v1_6_bam_bamheader'
                                           ByteString -> ByteString -> ByteString
`DB.append`
                                           ( Word32 -> ByteString
word32ToByteStringLE (Word32 -> ByteString) -> Word32 -> ByteString
forall a b. (a -> b) -> a -> b
$
                                               BAM_V1_6_BAM_BAMHeader -> Word32
bam_v1_6_bam_bamheader_l_text BAM_V1_6_BAM_BAMHeader
bam_v1_6_bam_bamheader'
                                           )
                                           ByteString -> ByteString -> ByteString
`DB.append`
                                           BAM_V1_6_BAM_BAMHeader -> ByteString
bam_v1_6_bam_bamheader_text BAM_V1_6_BAM_BAMHeader
bam_v1_6_bam_bamheader'
                                           ByteString -> ByteString -> ByteString
`DB.append`
                                           ( Word32 -> ByteString
word32ToByteStringLE (Word32 -> ByteString) -> Word32 -> ByteString
forall a b. (a -> b) -> a -> b
$
                                               BAM_V1_6_BAM_BAMHeader -> Word32
bam_v1_6_bam_bamheader_n_ref BAM_V1_6_BAM_BAMHeader
bam_v1_6_bam_bamheader'
                                           )
            let bam_v1_6_bam_bamheader_reference_information' :: ByteString
bam_v1_6_bam_bamheader_reference_information' = [ByteString] -> ByteString
DB.concat ([ByteString] -> ByteString) -> [ByteString] -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                  Seq ByteString -> [ByteString]
forall a. Seq a -> [a]
forall (t :: * -> *) a. Foldable t => t a -> [a]
toList  (Seq ByteString -> [ByteString]) -> Seq ByteString -> [ByteString]
forall a b. (a -> b) -> a -> b
$
                                                                    (BAM_V1_6_BAM_Reference_Information -> ByteString)
-> Seq BAM_V1_6_BAM_Reference_Information -> Seq ByteString
forall a b. (a -> b) -> Seq a -> Seq b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\BAM_V1_6_BAM_Reference_Information
currentreferenceinformation ->
                                                                             ( Word32 -> ByteString
word32ToByteStringLE (Word32 -> ByteString) -> Word32 -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                 BAM_V1_6_BAM_Reference_Information -> Word32
bam_v1_6_bam_reference_information_l_name BAM_V1_6_BAM_Reference_Information
currentreferenceinformation
                                                                             )
                                                                             ByteString -> ByteString -> ByteString
`DB.append`
                                                                             BAM_V1_6_BAM_Reference_Information -> ByteString
bam_v1_6_bam_reference_information_name BAM_V1_6_BAM_Reference_Information
currentreferenceinformation
                                                                             ByteString -> ByteString -> ByteString
`DB.append`
                                                                             ( Word32 -> ByteString
word32ToByteStringLE (Word32 -> ByteString) -> Word32 -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                                                 BAM_V1_6_BAM_Reference_Information -> Word32
bam_v1_6_bam_reference_information_l_ref BAM_V1_6_BAM_Reference_Information
currentreferenceinformation
                                                                             )
                                                                         )
                                                                    (BAM_V1_6_BAM_BAMHeader -> Seq BAM_V1_6_BAM_Reference_Information
bam_v1_6_bam_bamheader_reference_information BAM_V1_6_BAM_BAMHeader
bam_v1_6_bam_bamheader')
            let bam_v1_6_bam_bamheader''' :: ByteString
bam_v1_6_bam_bamheader''' = ByteString -> ByteString
DB.toStrict        (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$
                                              ByteString -> ByteString
CCZlibR.compress (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                ByteString -> ByteString
DB.fromStrict  (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                  ByteString
bam_v1_6_bam_bamheader''
                                                  ByteString -> ByteString -> ByteString
`DB.append`
                                                  ByteString
bam_v1_6_bam_bamheader_reference_information'
            -- total Block SIZE minus 1.
            ()
_ <-
              Handle -> ByteString -> IO ()
DB.hPutStr Handle
h                    (ByteString -> IO ()) -> ByteString -> IO ()
forall a b. (a -> b) -> a -> b
$
                         Word16 -> ByteString
word16ToByteStringLE (Word16 -> ByteString) -> Word16 -> ByteString
forall a b. (a -> b) -> a -> b
$
                         Int -> Word16
intToWord16LE ((ByteString -> Int
DB.length ByteString
bam_v1_6_bam_bamheader''' Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
26) Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1)
            -- Write the BAM header.
            ()
_ <-
              Handle -> ByteString -> IO ()
DB.hPutStr Handle
h
                         ByteString
bam_v1_6_bam_bamheader'''
            -- CRC-32.
            ()
_ <-
              Handle -> ByteString -> IO ()
DB.hPutStr Handle
h           (ByteString -> IO ()) -> ByteString -> IO ()
forall a b. (a -> b) -> a -> b
$
                Word32 -> ByteString
word32ToByteStringLE (Word32 -> ByteString) -> Word32 -> ByteString
forall a b. (a -> b) -> a -> b
$
                  ByteString -> Word32
forall a. CRC32 a => a -> Word32
DDCRC32.crc32      (ByteString -> Word32) -> ByteString -> Word32
forall a b. (a -> b) -> a -> b
$
                    ByteString
bam_v1_6_bam_bamheader''
                    ByteString -> ByteString -> ByteString
`DB.append`
                    ByteString
bam_v1_6_bam_bamheader_reference_information'
            -- Input SIZE (length of uncompressed data).
            Handle -> ByteString -> IO ()
DB.hPutStr Handle
h           (ByteString -> IO ()) -> ByteString -> IO ()
forall a b. (a -> b) -> a -> b
$
              Word32 -> ByteString
word32ToByteStringLE (Word32 -> ByteString) -> Word32 -> ByteString
forall a b. (a -> b) -> a -> b
$
                Int -> Word32
intToWord32LE      (Int -> Word32) -> Int -> Word32
forall a b. (a -> b) -> a -> b
$
                  ByteString -> Int
DB.length        (ByteString -> Int) -> ByteString -> Int
forall a b. (a -> b) -> a -> b
$
                    ByteString
bam_v1_6_bam_bamheader''
                    ByteString -> ByteString -> ByteString
`DB.append`
                    ByteString
bam_v1_6_bam_bamheader_reference_information'

-- | Write a @"BAM_V1_6"@ to a file.
--
-- See the [SAM v1.6](http://samtools.github.io/hts-specs/SAMv1.pdf) specification documentation.
writeBAM_V1_6 :: FilePath -- ^ Output path to BAM file.
              -> BAM_V1_6
              -> IO ()
writeBAM_V1_6 :: [Char] -> BAM_V1_6 -> IO ()
writeBAM_V1_6 [Char]
fp BAM_V1_6
bamv16 = do
  Handle
h <- [Char] -> IOMode -> IO Handle
openBinaryFile [Char]
fp
                IOMode
WriteMode
  Handle -> BAM_V1_6 -> IO ()
deconstructBAM_V1_6 Handle
h
                      BAM_V1_6
bamv16
  Handle -> IO ()
hFlush Handle
h
  Handle -> IO ()
hClose Handle
h