{-# LANGUAGE DeriveDataTypeable          #-}
{-# LANGUAGE DeriveGeneric               #-}
{-# LANGUAGE FlexibleContexts            #-}
{-# LANGUAGE FlexibleInstances           #-}
{-# LANGUAGE MultiParamTypeClasses       #-}
{-# LANGUAGE OverloadedLists             #-}
{-# LANGUAGE OverloadedStrings           #-}
{-# LANGUAGE MultiWayIf                  #-}
{-# LANGUAGE RecordWildCards             #-}
{-# LANGUAGE TypeFamilies                #-}
{-# LANGUAGE ViewPatterns                #-}
{-# Language QuasiQuotes                 #-}
{-# OPTIONS_GHC -fno-warn-name-shadowing #-}

-- |
-- Module      :  Data.BAM.Version1_6.Read.Parser.BAM.Alignment.Base
-- Copyright   :  (c) Matthew Mosior 2024
-- License     :  BSD-style
-- Maintainer  :  mattm.github@gmail.com
-- Portability :  portable
--
-- = WARNING
--
-- This module is considered __internal__.
--
-- The Package Versioning Policy __does not apply__.
--
-- The contents of this module may change __in any way whatsoever__
-- and __without any warning__ between minor versions of this package.
--
-- Authors importing this library are expected to track development
-- closely.
--
-- All credit goes to the author(s)/maintainer(s) of the
-- [containers](https://hackage.haskell.org/package/containers) library
-- for the above warning text.
--
-- = Description
--
-- This library enables the decoding/encoding of SAM, BAM and CRAM file formats.

module Data.BAM.Version1_6.Read.Parser.BAM.Alignment.Base ( -- * BAM_V1_6_BAM parser - alignment section
                                                            parse_BAM_V1_6_BAM_Alignment
                                                          ) where

import Data.BAM.Version1_6.BAM.Alignment
import Data.BAM.Version1_6.BAM.Alignment.OptionalFields.Base
import Data.BAM.Version1_6.Read.Error 
import Data.BAM.Version1_6.Internal
import Data.BAM.Version1_6.Read.Parser.BAM.Alignment.Internal
import Data.BAM.Version1_6.Read.Parser.BAM.Alignment.OptionalFields.AOPT
import Data.BAM.Version1_6.Read.Parser.BAM.Alignment.OptionalFields.BigCOPT
import Data.BAM.Version1_6.Read.Parser.BAM.Alignment.OptionalFields.BigIOPT
import Data.BAM.Version1_6.Read.Parser.BAM.Alignment.OptionalFields.BigSOPT
import Data.BAM.Version1_6.Read.Parser.BAM.Alignment.OptionalFields.SmallCOPT
import Data.BAM.Version1_6.Read.Parser.BAM.Alignment.OptionalFields.SmallIOPT
import Data.BAM.Version1_6.Read.Parser.BAM.Alignment.OptionalFields.SmallSOPT
import Data.BAM.Version1_6.Read.Parser.BAM.Alignment.OptionalFields.FOPT
import Data.BAM.Version1_6.Read.Parser.BAM.Alignment.OptionalFields.ZOPT
import Data.BAM.Version1_6.Read.Parser.BAM.Alignment.OptionalFields.HOPT
import Data.BAM.Version1_6.Read.Parser.BAM.Alignment.OptionalFields.BOPT

import Data.Attoparsec.ByteString.Lazy  as DABL
import Data.ByteString                  as DB hiding (intercalate,map)
import Data.List                                     (intercalate)
import Data.Sequence                    as DSeq      (empty,fromList,singleton,Seq(..))

-- | @"BAM_V1_6_BAM_Alignment"@ parser.
--
-- Defines a parser for the alignment section of the BAM v1.6 file format.
--
-- See the [SAM v1.6](http://samtools.github.io/hts-specs/SAMv1.pdf) specification documentation.
parse_BAM_V1_6_BAM_Alignment :: Parser BAM_V1_6_BAM_Alignment
parse_BAM_V1_6_BAM_Alignment :: Parser BAM_V1_6_BAM_Alignment
parse_BAM_V1_6_BAM_Alignment = do
  ByteString
block_size  <-
    Int -> Parser ByteString
DABL.take Int
4
  ByteString
refID       <-
    Int -> Parser ByteString
DABL.take Int
4
  ByteString
pos         <-
    Int -> Parser ByteString
DABL.take Int
4
  ByteString
l_read_name <-
    Int -> Parser ByteString
DABL.take Int
1
  ByteString
mapq        <-
    Int -> Parser ByteString
DABL.take Int
1
  ByteString
bin         <-
    Int -> Parser ByteString
DABL.take Int
2
  ByteString
n_cigar_op  <-
    Int -> Parser ByteString
DABL.take Int
2
  ByteString
flag        <-
    Int -> Parser ByteString
DABL.take Int
2
  ByteString
l_seq       <-
    Int -> Parser ByteString
DABL.take Int
4
  ByteString
next_refID  <-
    Int -> Parser ByteString
DABL.take Int
4 
  ByteString
next_pos    <-
    Int -> Parser ByteString
DABL.take Int
4
  ByteString
tlen        <-
    Int -> Parser ByteString
DABL.take Int
4
  ByteString
read_name   <-
    Int -> Parser ByteString
DABL.take
      ( Word8 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral      (Word8 -> Int) -> Word8 -> Int
forall a b. (a -> b) -> a -> b
$
          [Word8] -> Word8
word8sToWord8LE ([Word8] -> Word8) -> [Word8] -> Word8
forall a b. (a -> b) -> a -> b
$
            ByteString -> [Word8]
DB.unpack ByteString
l_read_name :: Int
      )
  ByteString
cigar       <-
    Int -> Parser ByteString
DABL.take
      ( ( ( Word16 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral       (Word16 -> Int) -> Word16 -> Int
forall a b. (a -> b) -> a -> b
$
              [Word8] -> Word16
word8sToWord16LE ([Word8] -> Word16) -> [Word8] -> Word16
forall a b. (a -> b) -> a -> b
$
                ByteString -> [Word8]
DB.unpack ByteString
n_cigar_op
          ) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
4
        ) :: Int
      )
  ByteString
seq         <-
    Int -> Parser ByteString
DABL.take
      ( ( ( ( Word32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral       (Word32 -> Int) -> Word32 -> Int
forall a b. (a -> b) -> a -> b
$
                [Word8] -> Word32
word8sToWord32LE ([Word8] -> Word32) -> [Word8] -> Word32
forall a b. (a -> b) -> a -> b
$
                  ByteString -> [Word8]
DB.unpack ByteString
l_seq
            ) Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1
          ) Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div` Int
2
        ) :: Int
      )
  ByteString
qual        <-
    Int -> Parser ByteString
DABL.take
      ( Word32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral       (Word32 -> Int) -> Word32 -> Int
forall a b. (a -> b) -> a -> b
$
          [Word8] -> Word32
word8sToWord32LE ([Word8] -> Word32) -> [Word8] -> Word32
forall a b. (a -> b) -> a -> b
$
            ByteString -> [Word8]
DB.unpack ByteString
l_seq :: Int
      )
  let bytesuptooptionalfields :: Int
bytesuptooptionalfields = Int
4                                             Int -> Int -> Int
forall a. Num a => a -> a -> a
+ 
                                Int
4                                             Int -> Int -> Int
forall a. Num a => a -> a -> a
+
                                Int
1                                             Int -> Int -> Int
forall a. Num a => a -> a -> a
+
                                Int
1                                             Int -> Int -> Int
forall a. Num a => a -> a -> a
+ 
                                Int
2                                             Int -> Int -> Int
forall a. Num a => a -> a -> a
+
                                Int
2                                             Int -> Int -> Int
forall a. Num a => a -> a -> a
+
                                Int
2                                             Int -> Int -> Int
forall a. Num a => a -> a -> a
+
                                Int
4                                             Int -> Int -> Int
forall a. Num a => a -> a -> a
+
                                Int
4                                             Int -> Int -> Int
forall a. Num a => a -> a -> a
+
                                Int
4                                             Int -> Int -> Int
forall a. Num a => a -> a -> a
+
                                Int
4                                             Int -> Int -> Int
forall a. Num a => a -> a -> a
+
                                ( Word8 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral      (Word8 -> Int) -> Word8 -> Int
forall a b. (a -> b) -> a -> b
$
                                    [Word8] -> Word8
word8sToWord8LE ([Word8] -> Word8) -> [Word8] -> Word8
forall a b. (a -> b) -> a -> b
$
                                      ByteString -> [Word8]
DB.unpack ByteString
l_read_name :: Int
                                )                                             Int -> Int -> Int
forall a. Num a => a -> a -> a
+
                                ( ( ( Word16 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral       (Word16 -> Int) -> Word16 -> Int
forall a b. (a -> b) -> a -> b
$
                                        [Word8] -> Word16
word8sToWord16LE ([Word8] -> Word16) -> [Word8] -> Word16
forall a b. (a -> b) -> a -> b
$
                                          ByteString -> [Word8]
DB.unpack ByteString
n_cigar_op
                                    ) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
4
                                  ) :: Int
                                )                                             Int -> Int -> Int
forall a. Num a => a -> a -> a
+
                                ( ( ( ( Word32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral       (Word32 -> Int) -> Word32 -> Int
forall a b. (a -> b) -> a -> b
$
                                          [Word8] -> Word32
word8sToWord32LE ([Word8] -> Word32) -> [Word8] -> Word32
forall a b. (a -> b) -> a -> b
$
                                            ByteString -> [Word8]
DB.unpack ByteString
l_seq
                                      ) Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1
                                    ) Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div` Int
2
                                  ) :: Int
                                )                                             Int -> Int -> Int
forall a. Num a => a -> a -> a
+
                                ( Word32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral       (Word32 -> Int) -> Word32 -> Int
forall a b. (a -> b) -> a -> b
$
                                    [Word8] -> Word32
word8sToWord32LE ([Word8] -> Word32) -> [Word8] -> Word32
forall a b. (a -> b) -> a -> b
$
                                      ByteString -> [Word8]
DB.unpack ByteString
l_seq
                                ) :: Int
  let block_size_int :: Int
block_size_int = Word32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral       (Word32 -> Int) -> Word32 -> Int
forall a b. (a -> b) -> a -> b
$
                         [Word8] -> Word32
word8sToWord32LE ([Word8] -> Word32) -> [Word8] -> Word32
forall a b. (a -> b) -> a -> b
$
                           ByteString -> [Word8]
DB.unpack ByteString
block_size :: Int
  case (Int
bytesuptooptionalfields Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
block_size_int) of
    Bool
True ->
      BAM_V1_6_BAM_Alignment -> Parser BAM_V1_6_BAM_Alignment
forall a. a -> Parser ByteString a
forall (m :: * -> *) a. Monad m => a -> m a
return BAM_V1_6_BAM_Alignment
               { bam_v1_6_bam_alignment_block_size :: Word32
bam_v1_6_bam_alignment_block_size     = [Word8] -> Word32
word8sToWord32LE ([Word8] -> Word32) -> [Word8] -> Word32
forall a b. (a -> b) -> a -> b
$
                                                           ByteString -> [Word8]
DB.unpack ByteString
block_size
               , bam_v1_6_bam_alignment_refID :: Int32
bam_v1_6_bam_alignment_refID          = [Word8] -> Int32
word8sToInt32LE ([Word8] -> Int32) -> [Word8] -> Int32
forall a b. (a -> b) -> a -> b
$
                                                           ByteString -> [Word8]
DB.unpack ByteString
refID
               , bam_v1_6_bam_alignment_pos :: Int32
bam_v1_6_bam_alignment_pos            = [Word8] -> Int32
word8sToInt32LE ([Word8] -> Int32) -> [Word8] -> Int32
forall a b. (a -> b) -> a -> b
$
                                                           ByteString -> [Word8]
DB.unpack ByteString
pos
               , bam_v1_6_bam_alignment_l_read_name :: Word8
bam_v1_6_bam_alignment_l_read_name    = [Word8] -> Word8
word8sToWord8LE ([Word8] -> Word8) -> [Word8] -> Word8
forall a b. (a -> b) -> a -> b
$
                                                           ByteString -> [Word8]
DB.unpack ByteString
l_read_name
               , bam_v1_6_bam_alignment_mapq :: Word8
bam_v1_6_bam_alignment_mapq           = [Word8] -> Word8
word8sToWord8LE ([Word8] -> Word8) -> [Word8] -> Word8
forall a b. (a -> b) -> a -> b
$
                                                           ByteString -> [Word8]
DB.unpack ByteString
mapq
               , bam_v1_6_bam_alignment_bin :: Word16
bam_v1_6_bam_alignment_bin            = [Word8] -> Word16
word8sToWord16LE ([Word8] -> Word16) -> [Word8] -> Word16
forall a b. (a -> b) -> a -> b
$
                                                           ByteString -> [Word8]
DB.unpack ByteString
bin
               , bam_v1_6_bam_alignment_n_cigar_op :: Word16
bam_v1_6_bam_alignment_n_cigar_op     = [Word8] -> Word16
word8sToWord16LE ([Word8] -> Word16) -> [Word8] -> Word16
forall a b. (a -> b) -> a -> b
$
                                                           ByteString -> [Word8]
DB.unpack ByteString
n_cigar_op
               , bam_v1_6_bam_alignment_flag :: Word16
bam_v1_6_bam_alignment_flag           = [Word8] -> Word16
word8sToWord16LE ([Word8] -> Word16) -> [Word8] -> Word16
forall a b. (a -> b) -> a -> b
$
                                                           ByteString -> [Word8]
DB.unpack ByteString
flag
               , bam_v1_6_bam_alignment_l_seq :: Word32
bam_v1_6_bam_alignment_l_seq          = [Word8] -> Word32
word8sToWord32LE ([Word8] -> Word32) -> [Word8] -> Word32
forall a b. (a -> b) -> a -> b
$
                                                           ByteString -> [Word8]
DB.unpack ByteString
l_seq
               , bam_v1_6_bam_alignment_next_refID :: Int32
bam_v1_6_bam_alignment_next_refID     = [Word8] -> Int32
word8sToInt32LE ([Word8] -> Int32) -> [Word8] -> Int32
forall a b. (a -> b) -> a -> b
$
                                                           ByteString -> [Word8]
DB.unpack ByteString
next_refID
               , bam_v1_6_bam_alignment_next_pos :: Int32
bam_v1_6_bam_alignment_next_pos       = [Word8] -> Int32
word8sToInt32LE ([Word8] -> Int32) -> [Word8] -> Int32
forall a b. (a -> b) -> a -> b
$
                                                           ByteString -> [Word8]
DB.unpack ByteString
next_pos
               , bam_v1_6_bam_alignment_tlen :: Int32
bam_v1_6_bam_alignment_tlen           = [Word8] -> Int32
word8sToInt32LE ([Word8] -> Int32) -> [Word8] -> Int32
forall a b. (a -> b) -> a -> b
$
                                                           ByteString -> [Word8]
DB.unpack ByteString
tlen
               , bam_v1_6_bam_alignment_read_name :: ByteString
bam_v1_6_bam_alignment_read_name      = ByteString
read_name
               , bam_v1_6_bam_alignment_cigar :: Seq Word32
bam_v1_6_bam_alignment_cigar          = [Word32] -> Seq Word32
forall a. [a] -> Seq a
DSeq.fromList                        ([Word32] -> Seq Word32) -> [Word32] -> Seq Word32
forall a b. (a -> b) -> a -> b
$
                                                           (ByteString -> Word32) -> [ByteString] -> [Word32]
forall a b. (a -> b) -> [a] -> [b]
map ([Word8] -> Word32
word8sToWord32LE ([Word8] -> Word32)
-> (ByteString -> [Word8]) -> ByteString -> Word32
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> [Word8]
DB.unpack) ([ByteString] -> [Word32]) -> [ByteString] -> [Word32]
forall a b. (a -> b) -> a -> b
$
                                                             Int -> ByteString -> [ByteString]
splitByteString Int
4
                                                                             ByteString
cigar
               , bam_v1_6_bam_alignment_seq :: Seq Word8
bam_v1_6_bam_alignment_seq            = [Word8] -> Seq Word8
forall a. [a] -> Seq a
DSeq.fromList ([Word8] -> Seq Word8) -> [Word8] -> Seq Word8
forall a b. (a -> b) -> a -> b
$
                                                           ByteString -> [Word8]
decodeSeqField ByteString
seq
               , bam_v1_6_bam_alignment_qual :: ByteString
bam_v1_6_bam_alignment_qual           = ByteString
qual
               , bam_v1_6_bam_alignment_optionalfields :: Seq BAM_V1_6_BAM_Alignment_OptionalFields
bam_v1_6_bam_alignment_optionalfields = BAM_V1_6_BAM_Alignment_OptionalFields
-> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. a -> Seq a
DSeq.singleton
                                                           BAM_V1_6_BAM_Alignment_OptionalFields
                                                             { bam_v1_6_bam_alignment_optionalfields_aopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
bam_v1_6_bam_alignment_optionalfields_aopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
forall a. Maybe a
Nothing
                                                             , bam_v1_6_bam_alignment_optionalfields_smallcopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
bam_v1_6_bam_alignment_optionalfields_smallcopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
forall a. Maybe a
Nothing
                                                             , bam_v1_6_bam_alignment_optionalfields_bigcopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
bam_v1_6_bam_alignment_optionalfields_bigcopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
forall a. Maybe a
Nothing
                                                             , bam_v1_6_bam_alignment_optionalfields_smalliopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
bam_v1_6_bam_alignment_optionalfields_smalliopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
forall a. Maybe a
Nothing
                                                             , bam_v1_6_bam_alignment_optionalfields_bigiopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
bam_v1_6_bam_alignment_optionalfields_bigiopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
forall a. Maybe a
Nothing
                                                             , bam_v1_6_bam_alignment_optionalfields_smallsopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
bam_v1_6_bam_alignment_optionalfields_smallsopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
forall a. Maybe a
Nothing
                                                             , bam_v1_6_bam_alignment_optionalfields_bigsopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
bam_v1_6_bam_alignment_optionalfields_bigsopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
forall a. Maybe a
Nothing
                                                             , bam_v1_6_bam_alignment_optionalfields_fopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
bam_v1_6_bam_alignment_optionalfields_fopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
forall a. Maybe a
Nothing
                                                             , bam_v1_6_bam_alignment_optionalfields_zopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
bam_v1_6_bam_alignment_optionalfields_zopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
forall a. Maybe a
Nothing
                                                             , bam_v1_6_bam_alignment_optionalfields_hopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
bam_v1_6_bam_alignment_optionalfields_hopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
forall a. Maybe a
Nothing
                                                             , bam_v1_6_bam_alignment_optionalfields_bopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. Maybe a
Nothing
                                                             }
               }
    Bool
False -> do
      -- This parser assumes that
      -- the optional alignment
      -- tags can appear in any order.
      Seq BAM_V1_6_BAM_Alignment_OptionalFields
optionalfieldbytes <-
        Int -> Int -> Parser (Seq BAM_V1_6_BAM_Alignment_OptionalFields)
parse_BAM_V1_6_BAM_Alignment_OptionalFields Int
block_size_int
                                                    Int
bytesuptooptionalfields
      BAM_V1_6_BAM_Alignment -> Parser BAM_V1_6_BAM_Alignment
forall a. a -> Parser ByteString a
forall (m :: * -> *) a. Monad m => a -> m a
return BAM_V1_6_BAM_Alignment
               { bam_v1_6_bam_alignment_block_size :: Word32
bam_v1_6_bam_alignment_block_size     = [Word8] -> Word32
word8sToWord32LE ([Word8] -> Word32) -> [Word8] -> Word32
forall a b. (a -> b) -> a -> b
$
                                                           ByteString -> [Word8]
DB.unpack ByteString
block_size
               , bam_v1_6_bam_alignment_refID :: Int32
bam_v1_6_bam_alignment_refID          = [Word8] -> Int32
word8sToInt32LE ([Word8] -> Int32) -> [Word8] -> Int32
forall a b. (a -> b) -> a -> b
$
                                                           ByteString -> [Word8]
DB.unpack ByteString
refID
               , bam_v1_6_bam_alignment_pos :: Int32
bam_v1_6_bam_alignment_pos            = [Word8] -> Int32
word8sToInt32LE ([Word8] -> Int32) -> [Word8] -> Int32
forall a b. (a -> b) -> a -> b
$
                                                           ByteString -> [Word8]
DB.unpack ByteString
pos
               , bam_v1_6_bam_alignment_l_read_name :: Word8
bam_v1_6_bam_alignment_l_read_name    = [Word8] -> Word8
word8sToWord8LE ([Word8] -> Word8) -> [Word8] -> Word8
forall a b. (a -> b) -> a -> b
$
                                                           ByteString -> [Word8]
DB.unpack ByteString
l_read_name
               , bam_v1_6_bam_alignment_mapq :: Word8
bam_v1_6_bam_alignment_mapq           = [Word8] -> Word8
word8sToWord8LE ([Word8] -> Word8) -> [Word8] -> Word8
forall a b. (a -> b) -> a -> b
$
                                                           ByteString -> [Word8]
DB.unpack ByteString
mapq
               , bam_v1_6_bam_alignment_bin :: Word16
bam_v1_6_bam_alignment_bin            = [Word8] -> Word16
word8sToWord16LE ([Word8] -> Word16) -> [Word8] -> Word16
forall a b. (a -> b) -> a -> b
$
                                                           ByteString -> [Word8]
DB.unpack ByteString
bin
               , bam_v1_6_bam_alignment_n_cigar_op :: Word16
bam_v1_6_bam_alignment_n_cigar_op     = [Word8] -> Word16
word8sToWord16LE ([Word8] -> Word16) -> [Word8] -> Word16
forall a b. (a -> b) -> a -> b
$
                                                           ByteString -> [Word8]
DB.unpack ByteString
n_cigar_op
               , bam_v1_6_bam_alignment_flag :: Word16
bam_v1_6_bam_alignment_flag           = [Word8] -> Word16
word8sToWord16LE ([Word8] -> Word16) -> [Word8] -> Word16
forall a b. (a -> b) -> a -> b
$
                                                           ByteString -> [Word8]
DB.unpack ByteString
flag
               , bam_v1_6_bam_alignment_l_seq :: Word32
bam_v1_6_bam_alignment_l_seq          = [Word8] -> Word32
word8sToWord32LE ([Word8] -> Word32) -> [Word8] -> Word32
forall a b. (a -> b) -> a -> b
$
                                                           ByteString -> [Word8]
DB.unpack ByteString
l_seq
               , bam_v1_6_bam_alignment_next_refID :: Int32
bam_v1_6_bam_alignment_next_refID     = [Word8] -> Int32
word8sToInt32LE ([Word8] -> Int32) -> [Word8] -> Int32
forall a b. (a -> b) -> a -> b
$
                                                           ByteString -> [Word8]
DB.unpack ByteString
next_refID
               , bam_v1_6_bam_alignment_next_pos :: Int32
bam_v1_6_bam_alignment_next_pos       = [Word8] -> Int32
word8sToInt32LE ([Word8] -> Int32) -> [Word8] -> Int32
forall a b. (a -> b) -> a -> b
$
                                                           ByteString -> [Word8]
DB.unpack ByteString
next_pos
               , bam_v1_6_bam_alignment_tlen :: Int32
bam_v1_6_bam_alignment_tlen           = [Word8] -> Int32
word8sToInt32LE ([Word8] -> Int32) -> [Word8] -> Int32
forall a b. (a -> b) -> a -> b
$
                                                           ByteString -> [Word8]
DB.unpack ByteString
tlen
               , bam_v1_6_bam_alignment_read_name :: ByteString
bam_v1_6_bam_alignment_read_name      = ByteString
read_name
               , bam_v1_6_bam_alignment_cigar :: Seq Word32
bam_v1_6_bam_alignment_cigar          = [Word32] -> Seq Word32
forall a. [a] -> Seq a
DSeq.fromList                        ([Word32] -> Seq Word32) -> [Word32] -> Seq Word32
forall a b. (a -> b) -> a -> b
$
                                                           (ByteString -> Word32) -> [ByteString] -> [Word32]
forall a b. (a -> b) -> [a] -> [b]
map ([Word8] -> Word32
word8sToWord32LE ([Word8] -> Word32)
-> (ByteString -> [Word8]) -> ByteString -> Word32
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> [Word8]
DB.unpack) ([ByteString] -> [Word32]) -> [ByteString] -> [Word32]
forall a b. (a -> b) -> a -> b
$
                                                             Int -> ByteString -> [ByteString]
splitByteString Int
4
                                                                             ByteString
cigar
               , bam_v1_6_bam_alignment_seq :: Seq Word8
bam_v1_6_bam_alignment_seq            = [Word8] -> Seq Word8
forall a. [a] -> Seq a
DSeq.fromList ([Word8] -> Seq Word8) -> [Word8] -> Seq Word8
forall a b. (a -> b) -> a -> b
$
                                                           ByteString -> [Word8]
decodeSeqField ByteString
seq
               , bam_v1_6_bam_alignment_qual :: ByteString
bam_v1_6_bam_alignment_qual           = ByteString
qual
               , bam_v1_6_bam_alignment_optionalfields :: Seq BAM_V1_6_BAM_Alignment_OptionalFields
bam_v1_6_bam_alignment_optionalfields = Seq BAM_V1_6_BAM_Alignment_OptionalFields
optionalfieldbytes
               }
  where
    parse_BAM_V1_6_BAM_Alignment_OptionalFields :: Int
                                                -> Int
                                                -> Parser (Seq BAM_V1_6_BAM_Alignment_OptionalFields)
    parse_BAM_V1_6_BAM_Alignment_OptionalFields :: Int -> Int -> Parser (Seq BAM_V1_6_BAM_Alignment_OptionalFields)
parse_BAM_V1_6_BAM_Alignment_OptionalFields Int
block_size_int
                                                Int
bytesuptooptionalfields = do
      ByteString
optionalfieldbytes' <-
        Int -> Parser ByteString
DABL.take (Int -> Parser ByteString) -> Int -> Parser ByteString
forall a b. (a -> b) -> a -> b
$
          Int
block_size_int Int -> Int -> Int
forall a. Num a => a -> a -> a
-
          Int
bytesuptooptionalfields
      Seq BAM_V1_6_BAM_Alignment_OptionalFields
-> Parser (Seq BAM_V1_6_BAM_Alignment_OptionalFields)
forall a. a -> Parser ByteString a
forall (m :: * -> *) a. Monad m => a -> m a
return (Seq BAM_V1_6_BAM_Alignment_OptionalFields
 -> Parser (Seq BAM_V1_6_BAM_Alignment_OptionalFields))
-> Seq BAM_V1_6_BAM_Alignment_OptionalFields
-> Parser (Seq BAM_V1_6_BAM_Alignment_OptionalFields)
forall a b. (a -> b) -> a -> b
$
        ByteString -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
parse_OptionalFields ByteString
optionalfieldbytes'
      where
        parse_OptionalFields :: DB.ByteString
                             -> Seq BAM_V1_6_BAM_Alignment_OptionalFields 
        parse_OptionalFields :: ByteString -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
parse_OptionalFields ByteString
bs =
          case ByteString -> Bool
DB.null ByteString
bs of
            Bool
True  ->
              Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. Seq a
DSeq.empty
            Bool
False ->
              case ByteString -> Int -> Maybe Word8
DB.indexMaybe ByteString
bs Int
2 of
                Maybe Word8
Nothing                      ->
                  [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error ([Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields)
-> [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
                    BAM_V1_6_Read_Error -> [Char]
forall a. Show a => a -> [Char]
show BAM_V1_6_Read_Error
BAM_V1_6_Read_Error_Alignment_OptionalFields_Index_Missing
                -- AOPT <-> 'A'
                Just Word8
0x41 ->
                  case ( Parser BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
-> ByteString -> Result BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
forall a. Parser a -> ByteString -> Result a
DABL.parse Parser BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
parse_BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
                                    ( ByteString -> ByteString
DB.fromStrict (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$
                                        Int -> ByteString -> ByteString
DB.take Int
4
                                                ByteString
bs
                                    )
                       ) of
                    Fail ByteString
_
                         [[Char]]
ctxs
                         [Char]
err ->
                      [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error  ([Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields)
-> [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
                        [Char] -> [Char]
forall a. Show a => a -> [Char]
show ([Char] -> [Char]) -> [Char] -> [Char]
forall a b. (a -> b) -> a -> b
$ [Char]
"Error while parsing AOPT field." [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
"\n"                              [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
"Parsing contexts: "              [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               ([Char] -> [[Char]] -> [Char]
forall a. [a] -> [[a]] -> [a]
intercalate [Char]
", " [[Char]]
ctxs)           [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
"\n"                              [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
"Error message: "                 [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
err
                    Done ByteString
remainingbytes
                         BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
parsedbs -> do
                      let strictremainingbytes :: ByteString
strictremainingbytes = ByteString -> ByteString
DB.toStrict ByteString
remainingbytes
                      case ByteString -> Bool
DB.null ByteString
strictremainingbytes of
                        Bool
True  ->
                          BAM_V1_6_BAM_Alignment_OptionalFields
                            { bam_v1_6_bam_alignment_optionalfields_aopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
bam_v1_6_bam_alignment_optionalfields_aopt        = BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
forall a. a -> Maybe a
Just BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
parsedbs
                            , bam_v1_6_bam_alignment_optionalfields_smallcopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
bam_v1_6_bam_alignment_optionalfields_smallcopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_bigcopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
bam_v1_6_bam_alignment_optionalfields_bigcopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_smalliopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
bam_v1_6_bam_alignment_optionalfields_smalliopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_bigiopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
bam_v1_6_bam_alignment_optionalfields_bigiopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_smallsopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
bam_v1_6_bam_alignment_optionalfields_smallsopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_bigsopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
bam_v1_6_bam_alignment_optionalfields_bigsopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_fopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
bam_v1_6_bam_alignment_optionalfields_fopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_zopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
bam_v1_6_bam_alignment_optionalfields_zopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_hopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
bam_v1_6_bam_alignment_optionalfields_hopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_bopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. Maybe a
Nothing
                            }
                          BAM_V1_6_BAM_Alignment_OptionalFields
-> Seq BAM_V1_6_BAM_Alignment_OptionalFields
-> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. a -> Seq a -> Seq a
DSeq.:<|
                          ByteString -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
parse_OptionalFields ( Int -> ByteString -> ByteString
DB.drop Int
4
                                                         ByteString
bs
                                               )
                        Bool
False ->
                          [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error ([Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields)
-> [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
                            BAM_V1_6_Read_Error -> [Char]
forall a. Show a => a -> [Char]
show BAM_V1_6_Read_Error
BAM_V1_6_Read_Error_Alignment_OptionalFields_Remaining_Bytes
                -- SmallCOPT <-> 'c'
                Just Word8
0x63 ->
                  case ( Parser BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
-> ByteString
-> Result BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
forall a. Parser a -> ByteString -> Result a
DABL.parse Parser BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
parse_BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
                                    ( ByteString -> ByteString
DB.fromStrict (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$
                                        Int -> ByteString -> ByteString
DB.take Int
4
                                                ByteString
bs
                                    )
                       ) of
                    Fail ByteString
_
                         [[Char]]
ctxs
                         [Char]
err ->
                      [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error  ([Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields)
-> [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
                        [Char] -> [Char]
forall a. Show a => a -> [Char]
show ([Char] -> [Char]) -> [Char] -> [Char]
forall a b. (a -> b) -> a -> b
$ [Char]
"Error while parsing SmallCOPT field." [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
"\n"                                   [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
"Parsing contexts: "                   [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               ([Char] -> [[Char]] -> [Char]
forall a. [a] -> [[a]] -> [a]
intercalate [Char]
", " [[Char]]
ctxs)                [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
"\n"                                   [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
"Error message: "                      [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
err
                    Done ByteString
remainingbytes
                         BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
parsedbs -> do
                      let strictremainingbytes :: ByteString
strictremainingbytes = ByteString -> ByteString
DB.toStrict ByteString
remainingbytes
                      case ByteString -> Bool
DB.null ByteString
strictremainingbytes of
                        Bool
True  ->
                          BAM_V1_6_BAM_Alignment_OptionalFields
                            { bam_v1_6_bam_alignment_optionalfields_aopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
bam_v1_6_bam_alignment_optionalfields_aopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_smallcopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
bam_v1_6_bam_alignment_optionalfields_smallcopt   = BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
forall a. a -> Maybe a
Just BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
parsedbs
                            , bam_v1_6_bam_alignment_optionalfields_bigcopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
bam_v1_6_bam_alignment_optionalfields_bigcopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_smalliopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
bam_v1_6_bam_alignment_optionalfields_smalliopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_bigiopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
bam_v1_6_bam_alignment_optionalfields_bigiopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_smallsopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
bam_v1_6_bam_alignment_optionalfields_smallsopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_bigsopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
bam_v1_6_bam_alignment_optionalfields_bigsopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_fopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
bam_v1_6_bam_alignment_optionalfields_fopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_zopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
bam_v1_6_bam_alignment_optionalfields_zopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_hopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
bam_v1_6_bam_alignment_optionalfields_hopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_bopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. Maybe a
Nothing
                            }
                          BAM_V1_6_BAM_Alignment_OptionalFields
-> Seq BAM_V1_6_BAM_Alignment_OptionalFields
-> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. a -> Seq a -> Seq a
DSeq.:<|
                          ByteString -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
parse_OptionalFields ( Int -> ByteString -> ByteString
DB.drop Int
4
                                                         ByteString
bs
                                               )
                        Bool
False ->
                          [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error ([Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields)
-> [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
                            BAM_V1_6_Read_Error -> [Char]
forall a. Show a => a -> [Char]
show BAM_V1_6_Read_Error
BAM_V1_6_Read_Error_Alignment_OptionalFields_Remaining_Bytes
                -- BigCOPT <-> 'C'
                Just Word8
0x43 ->
                  case ( Parser BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
-> ByteString
-> Result BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
forall a. Parser a -> ByteString -> Result a
DABL.parse Parser BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
parse_BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
                                    ( ByteString -> ByteString
DB.fromStrict (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$
                                        Int -> ByteString -> ByteString
DB.take Int
4
                                                ByteString
bs
                                    )
                       ) of
                    Fail ByteString
_
                         [[Char]]
ctxs
                         [Char]
err ->
                      [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error  ([Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields)
-> [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
                        [Char] -> [Char]
forall a. Show a => a -> [Char]
show ([Char] -> [Char]) -> [Char] -> [Char]
forall a b. (a -> b) -> a -> b
$ [Char]
"Error while parsing BigCOPT field." [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
"\n"                                 [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
"Parsing contexts: "                 [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               ([Char] -> [[Char]] -> [Char]
forall a. [a] -> [[a]] -> [a]
intercalate [Char]
", " [[Char]]
ctxs)              [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
"\n"                                 [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
"Error message: "                    [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
err
                    Done ByteString
remainingbytes
                         BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
parsedbs -> do
                      let strictremainingbytes :: ByteString
strictremainingbytes = ByteString -> ByteString
DB.toStrict ByteString
remainingbytes
                      case ByteString -> Bool
DB.null ByteString
strictremainingbytes of
                        Bool
True  ->
                          BAM_V1_6_BAM_Alignment_OptionalFields
                            { bam_v1_6_bam_alignment_optionalfields_aopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
bam_v1_6_bam_alignment_optionalfields_aopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_smallcopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
bam_v1_6_bam_alignment_optionalfields_smallcopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_bigcopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
bam_v1_6_bam_alignment_optionalfields_bigcopt     = BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
forall a. a -> Maybe a
Just BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
parsedbs
                            , bam_v1_6_bam_alignment_optionalfields_smalliopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
bam_v1_6_bam_alignment_optionalfields_smalliopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_bigiopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
bam_v1_6_bam_alignment_optionalfields_bigiopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_smallsopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
bam_v1_6_bam_alignment_optionalfields_smallsopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_bigsopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
bam_v1_6_bam_alignment_optionalfields_bigsopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_fopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
bam_v1_6_bam_alignment_optionalfields_fopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_zopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
bam_v1_6_bam_alignment_optionalfields_zopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_hopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
bam_v1_6_bam_alignment_optionalfields_hopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_bopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. Maybe a
Nothing
                            }
                          BAM_V1_6_BAM_Alignment_OptionalFields
-> Seq BAM_V1_6_BAM_Alignment_OptionalFields
-> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. a -> Seq a -> Seq a
DSeq.:<|
                          ByteString -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
parse_OptionalFields ( Int -> ByteString -> ByteString
DB.drop Int
4
                                                         ByteString
bs
                                               )
                        Bool
False ->
                          [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error ([Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields)
-> [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
                            BAM_V1_6_Read_Error -> [Char]
forall a. Show a => a -> [Char]
show BAM_V1_6_Read_Error
BAM_V1_6_Read_Error_Alignment_OptionalFields_Remaining_Bytes
                -- SmallIOPT <-> 'i'
                Just Word8
0x69 ->
                  case ( Parser BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
-> ByteString
-> Result BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
forall a. Parser a -> ByteString -> Result a
DABL.parse Parser BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
parse_BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
                                    ( ByteString -> ByteString
DB.fromStrict (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$
                                        Int -> ByteString -> ByteString
DB.take Int
7
                                                ByteString
bs
                                    )
                       ) of
                    Fail ByteString
_
                         [[Char]]
ctxs
                         [Char]
err ->
                      [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error  ([Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields)
-> [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
                        [Char] -> [Char]
forall a. Show a => a -> [Char]
show ([Char] -> [Char]) -> [Char] -> [Char]
forall a b. (a -> b) -> a -> b
$ [Char]
"Error while parsing SmallIOPT field." [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
"\n"                                   [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
"Parsing contexts: "                   [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               ([Char] -> [[Char]] -> [Char]
forall a. [a] -> [[a]] -> [a]
intercalate [Char]
", " [[Char]]
ctxs)                [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
"\n"                                   [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
"Error message: "                      [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
err
                    Done ByteString
remainingbytes
                         BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
parsedbs -> do
                      let strictremainingbytes :: ByteString
strictremainingbytes = ByteString -> ByteString
DB.toStrict ByteString
remainingbytes
                      case ByteString -> Bool
DB.null ByteString
strictremainingbytes of
                        Bool
True  ->
                          BAM_V1_6_BAM_Alignment_OptionalFields
                            { bam_v1_6_bam_alignment_optionalfields_aopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
bam_v1_6_bam_alignment_optionalfields_aopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_smallcopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
bam_v1_6_bam_alignment_optionalfields_smallcopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_bigcopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
bam_v1_6_bam_alignment_optionalfields_bigcopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_smalliopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
bam_v1_6_bam_alignment_optionalfields_smalliopt   = BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
forall a. a -> Maybe a
Just BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
parsedbs
                            , bam_v1_6_bam_alignment_optionalfields_bigiopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
bam_v1_6_bam_alignment_optionalfields_bigiopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_smallsopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
bam_v1_6_bam_alignment_optionalfields_smallsopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_bigsopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
bam_v1_6_bam_alignment_optionalfields_bigsopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_fopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
bam_v1_6_bam_alignment_optionalfields_fopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_zopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
bam_v1_6_bam_alignment_optionalfields_zopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_hopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
bam_v1_6_bam_alignment_optionalfields_hopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_bopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. Maybe a
Nothing
                            }
                          BAM_V1_6_BAM_Alignment_OptionalFields
-> Seq BAM_V1_6_BAM_Alignment_OptionalFields
-> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. a -> Seq a -> Seq a
DSeq.:<|
                          ByteString -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
parse_OptionalFields ( Int -> ByteString -> ByteString
DB.drop Int
7
                                                         ByteString
bs
                                               ) 
                        Bool
False ->
                          [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error ([Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields)
-> [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
                            BAM_V1_6_Read_Error -> [Char]
forall a. Show a => a -> [Char]
show BAM_V1_6_Read_Error
BAM_V1_6_Read_Error_Alignment_OptionalFields_Remaining_Bytes
                -- BigIOPT <-> 'I'
                Just Word8
0x49 ->
                  case ( Parser BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
-> ByteString
-> Result BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
forall a. Parser a -> ByteString -> Result a
DABL.parse Parser BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
parse_BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
                                    ( ByteString -> ByteString
DB.fromStrict (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$
                                        Int -> ByteString -> ByteString
DB.take Int
7
                                                ByteString
bs
                                    )
                       ) of
                    Fail ByteString
_
                         [[Char]]
ctxs
                         [Char]
err ->
                      [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error  ([Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields)
-> [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
                        [Char] -> [Char]
forall a. Show a => a -> [Char]
show ([Char] -> [Char]) -> [Char] -> [Char]
forall a b. (a -> b) -> a -> b
$ [Char]
"Error while parsing BigIOPT field." [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
"\n"                                 [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
"Parsing contexts: "                 [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               ([Char] -> [[Char]] -> [Char]
forall a. [a] -> [[a]] -> [a]
intercalate [Char]
", " [[Char]]
ctxs)              [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
"\n"                                 [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
"Error message: "                    [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
err
                    Done ByteString
remainingbytes
                         BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
parsedbs -> do
                      let strictremainingbytes :: ByteString
strictremainingbytes = ByteString -> ByteString
DB.toStrict ByteString
remainingbytes
                      case ByteString -> Bool
DB.null ByteString
strictremainingbytes of
                        Bool
True  ->
                          BAM_V1_6_BAM_Alignment_OptionalFields
                            { bam_v1_6_bam_alignment_optionalfields_aopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
bam_v1_6_bam_alignment_optionalfields_aopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_smallcopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
bam_v1_6_bam_alignment_optionalfields_smallcopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_bigcopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
bam_v1_6_bam_alignment_optionalfields_bigcopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_smalliopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
bam_v1_6_bam_alignment_optionalfields_smalliopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_bigiopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
bam_v1_6_bam_alignment_optionalfields_bigiopt     = BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
forall a. a -> Maybe a
Just BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
parsedbs
                            , bam_v1_6_bam_alignment_optionalfields_smallsopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
bam_v1_6_bam_alignment_optionalfields_smallsopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_bigsopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
bam_v1_6_bam_alignment_optionalfields_bigsopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_fopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
bam_v1_6_bam_alignment_optionalfields_fopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_zopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
bam_v1_6_bam_alignment_optionalfields_zopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_hopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
bam_v1_6_bam_alignment_optionalfields_hopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_bopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. Maybe a
Nothing
                            }
                          BAM_V1_6_BAM_Alignment_OptionalFields
-> Seq BAM_V1_6_BAM_Alignment_OptionalFields
-> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. a -> Seq a -> Seq a
DSeq.:<|
                          ByteString -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
parse_OptionalFields ( Int -> ByteString -> ByteString
DB.drop Int
7
                                                         ByteString
bs
                                               )
                        Bool
False ->
                          [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error ([Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields)
-> [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
                            BAM_V1_6_Read_Error -> [Char]
forall a. Show a => a -> [Char]
show BAM_V1_6_Read_Error
BAM_V1_6_Read_Error_Alignment_OptionalFields_Remaining_Bytes
                -- SmallSOPT <-> 's'
                Just Word8
0x73 ->
                  case ( Parser BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
-> ByteString
-> Result BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
forall a. Parser a -> ByteString -> Result a
DABL.parse Parser BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
parse_BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
                                    ( ByteString -> ByteString
DB.fromStrict (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$
                                        Int -> ByteString -> ByteString
DB.take Int
5
                                                ByteString
bs
                                    )
                       ) of
                    Fail ByteString
_
                         [[Char]]
ctxs
                         [Char]
err ->
                      [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error  ([Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields)
-> [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
                        [Char] -> [Char]
forall a. Show a => a -> [Char]
show ([Char] -> [Char]) -> [Char] -> [Char]
forall a b. (a -> b) -> a -> b
$ [Char]
"Error while parsing SmallSOPT field." [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
"\n"                                   [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
"Parsing contexts: "                   [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               ([Char] -> [[Char]] -> [Char]
forall a. [a] -> [[a]] -> [a]
intercalate [Char]
", " [[Char]]
ctxs)                [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
"\n"                                   [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
"Error message: "                      [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
err
                    Done ByteString
remainingbytes
                         BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
parsedbs -> do
                      let strictremainingbytes :: ByteString
strictremainingbytes = ByteString -> ByteString
DB.toStrict ByteString
remainingbytes
                      case ByteString -> Bool
DB.null ByteString
strictremainingbytes of
                        Bool
True  ->
                          BAM_V1_6_BAM_Alignment_OptionalFields
                            { bam_v1_6_bam_alignment_optionalfields_aopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
bam_v1_6_bam_alignment_optionalfields_aopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_smallcopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
bam_v1_6_bam_alignment_optionalfields_smallcopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_bigcopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
bam_v1_6_bam_alignment_optionalfields_bigcopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_smalliopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
bam_v1_6_bam_alignment_optionalfields_smalliopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_bigiopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
bam_v1_6_bam_alignment_optionalfields_bigiopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_smallsopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
bam_v1_6_bam_alignment_optionalfields_smallsopt   = BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
forall a. a -> Maybe a
Just BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
parsedbs
                            , bam_v1_6_bam_alignment_optionalfields_bigsopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
bam_v1_6_bam_alignment_optionalfields_bigsopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_fopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
bam_v1_6_bam_alignment_optionalfields_fopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_zopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
bam_v1_6_bam_alignment_optionalfields_zopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_hopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
bam_v1_6_bam_alignment_optionalfields_hopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_bopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. Maybe a
Nothing
                            }
                          BAM_V1_6_BAM_Alignment_OptionalFields
-> Seq BAM_V1_6_BAM_Alignment_OptionalFields
-> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. a -> Seq a -> Seq a
DSeq.:<|
                          ByteString -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
parse_OptionalFields ( Int -> ByteString -> ByteString
DB.drop Int
5
                                                         ByteString
bs
                                               )
                        Bool
False ->
                          [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error ([Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields)
-> [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
                            BAM_V1_6_Read_Error -> [Char]
forall a. Show a => a -> [Char]
show BAM_V1_6_Read_Error
BAM_V1_6_Read_Error_Alignment_OptionalFields_Remaining_Bytes
                -- BigSOPT <-> 'S'
                Just Word8
0x53 ->
                  case ( Parser BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
-> ByteString
-> Result BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
forall a. Parser a -> ByteString -> Result a
DABL.parse Parser BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
parse_BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
                                    ( ByteString -> ByteString
DB.fromStrict (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$
                                        Int -> ByteString -> ByteString
DB.take Int
5
                                                ByteString
bs
                                    )
                       ) of
                    Fail ByteString
_
                         [[Char]]
ctxs
                         [Char]
err ->
                      [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error  ([Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields)
-> [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
                        [Char] -> [Char]
forall a. Show a => a -> [Char]
show ([Char] -> [Char]) -> [Char] -> [Char]
forall a b. (a -> b) -> a -> b
$ [Char]
"Error while parsing BigSOPT field." [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
"\n"                                 [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
"Parsing contexts: "                 [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               ([Char] -> [[Char]] -> [Char]
forall a. [a] -> [[a]] -> [a]
intercalate [Char]
", " [[Char]]
ctxs)              [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
"\n"                                 [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
"Error message: "                    [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
err
                    Done ByteString
remainingbytes
                         BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
parsedbs -> do
                      let strictremainingbytes :: ByteString
strictremainingbytes = ByteString -> ByteString
DB.toStrict ByteString
remainingbytes
                      case ByteString -> Bool
DB.null ByteString
strictremainingbytes of
                        Bool
True  ->
                          BAM_V1_6_BAM_Alignment_OptionalFields
                            { bam_v1_6_bam_alignment_optionalfields_aopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
bam_v1_6_bam_alignment_optionalfields_aopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_smallcopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
bam_v1_6_bam_alignment_optionalfields_smallcopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_bigcopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
bam_v1_6_bam_alignment_optionalfields_bigcopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_smalliopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
bam_v1_6_bam_alignment_optionalfields_smalliopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_bigiopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
bam_v1_6_bam_alignment_optionalfields_bigiopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_smallsopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
bam_v1_6_bam_alignment_optionalfields_smallsopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_bigsopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
bam_v1_6_bam_alignment_optionalfields_bigsopt     = BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
forall a. a -> Maybe a
Just BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
parsedbs
                            , bam_v1_6_bam_alignment_optionalfields_fopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
bam_v1_6_bam_alignment_optionalfields_fopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_zopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
bam_v1_6_bam_alignment_optionalfields_zopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_hopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
bam_v1_6_bam_alignment_optionalfields_hopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_bopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. Maybe a
Nothing
                            }
                          BAM_V1_6_BAM_Alignment_OptionalFields
-> Seq BAM_V1_6_BAM_Alignment_OptionalFields
-> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. a -> Seq a -> Seq a
DSeq.:<|
                          ByteString -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
parse_OptionalFields ( Int -> ByteString -> ByteString
DB.drop Int
5
                                                         ByteString
bs
                                               )
                        Bool
False ->
                          [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error ([Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields)
-> [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
                            BAM_V1_6_Read_Error -> [Char]
forall a. Show a => a -> [Char]
show BAM_V1_6_Read_Error
BAM_V1_6_Read_Error_Alignment_OptionalFields_Remaining_Bytes
                -- FOPT <-> 'f'
                Just Word8
0x66 ->
                  case ( Parser BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
-> ByteString -> Result BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
forall a. Parser a -> ByteString -> Result a
DABL.parse Parser BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
parse_BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
                                    ( ByteString -> ByteString
DB.fromStrict (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$
                                        Int -> ByteString -> ByteString
DB.take Int
7
                                                ByteString
bs
                                    )
                       ) of
                    Fail ByteString
_
                         [[Char]]
ctxs
                         [Char]
err ->
                      [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error  ([Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields)
-> [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
                        [Char] -> [Char]
forall a. Show a => a -> [Char]
show ([Char] -> [Char]) -> [Char] -> [Char]
forall a b. (a -> b) -> a -> b
$ [Char]
"Error while parsing FOPT field." [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
"\n"                              [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
"Parsing contexts: "              [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               ([Char] -> [[Char]] -> [Char]
forall a. [a] -> [[a]] -> [a]
intercalate [Char]
", " [[Char]]
ctxs)           [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
"\n"                              [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
"Error message: "                 [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
err
                    Done ByteString
remainingbytes
                         BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
parsedbs -> do
                      let strictremainingbytes :: ByteString
strictremainingbytes = ByteString -> ByteString
DB.toStrict ByteString
remainingbytes
                      case ByteString -> Bool
DB.null ByteString
strictremainingbytes of
                        Bool
True  ->
                          BAM_V1_6_BAM_Alignment_OptionalFields
                            { bam_v1_6_bam_alignment_optionalfields_aopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
bam_v1_6_bam_alignment_optionalfields_aopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_smallcopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
bam_v1_6_bam_alignment_optionalfields_smallcopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_bigcopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
bam_v1_6_bam_alignment_optionalfields_bigcopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_smalliopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
bam_v1_6_bam_alignment_optionalfields_smalliopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_bigiopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
bam_v1_6_bam_alignment_optionalfields_bigiopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_smallsopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
bam_v1_6_bam_alignment_optionalfields_smallsopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_bigsopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
bam_v1_6_bam_alignment_optionalfields_bigsopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_fopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
bam_v1_6_bam_alignment_optionalfields_fopt        = BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
forall a. a -> Maybe a
Just BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
parsedbs
                            , bam_v1_6_bam_alignment_optionalfields_zopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
bam_v1_6_bam_alignment_optionalfields_zopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_hopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
bam_v1_6_bam_alignment_optionalfields_hopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_bopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. Maybe a
Nothing
                            }
                          BAM_V1_6_BAM_Alignment_OptionalFields
-> Seq BAM_V1_6_BAM_Alignment_OptionalFields
-> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. a -> Seq a -> Seq a
DSeq.:<|
                          ByteString -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
parse_OptionalFields ( Int -> ByteString -> ByteString
DB.drop Int
7
                                                         ByteString
bs
                                               )
                        Bool
False ->
                          [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error ([Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields)
-> [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
                            BAM_V1_6_Read_Error -> [Char]
forall a. Show a => a -> [Char]
show BAM_V1_6_Read_Error
BAM_V1_6_Read_Error_Alignment_OptionalFields_Remaining_Bytes
                -- ZOPT <-> 'Z'
                Just Word8
0x5A ->
                  case ( Parser BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
-> ByteString -> Result BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
forall a. Parser a -> ByteString -> Result a
DABL.parse Parser BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
parse_BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
                                    ( ByteString -> ByteString
DB.fromStrict (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$
                                        Word8 -> ByteString -> ByteString
takeUpTo Word8
0x00
                                                 ByteString
bs
                                    )
                       ) of
                    Fail ByteString
_
                         [[Char]]
ctxs
                         [Char]
err ->
                      [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error  ([Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields)
-> [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
                        [Char] -> [Char]
forall a. Show a => a -> [Char]
show ([Char] -> [Char]) -> [Char] -> [Char]
forall a b. (a -> b) -> a -> b
$ [Char]
"Error while parsing ZOPT field." [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
"\n"                              [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
"Parsing contexts: "              [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               ([Char] -> [[Char]] -> [Char]
forall a. [a] -> [[a]] -> [a]
intercalate [Char]
", " [[Char]]
ctxs)           [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
"\n"                              [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
"Error message: "                 [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
err
                    Done ByteString
remainingbytes
                         BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
parsedbs -> do
                      let strictremainingbytes :: ByteString
strictremainingbytes = ByteString -> ByteString
DB.toStrict ByteString
remainingbytes
                      case ByteString -> Bool
DB.null ByteString
strictremainingbytes of
                        Bool
True  ->
                          BAM_V1_6_BAM_Alignment_OptionalFields
                            { bam_v1_6_bam_alignment_optionalfields_aopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
bam_v1_6_bam_alignment_optionalfields_aopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_smallcopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
bam_v1_6_bam_alignment_optionalfields_smallcopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_bigcopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
bam_v1_6_bam_alignment_optionalfields_bigcopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_smalliopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
bam_v1_6_bam_alignment_optionalfields_smalliopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_bigiopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
bam_v1_6_bam_alignment_optionalfields_bigiopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_smallsopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
bam_v1_6_bam_alignment_optionalfields_smallsopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_bigsopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
bam_v1_6_bam_alignment_optionalfields_bigsopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_fopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
bam_v1_6_bam_alignment_optionalfields_fopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_zopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
bam_v1_6_bam_alignment_optionalfields_zopt        = BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
forall a. a -> Maybe a
Just BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
parsedbs
                            , bam_v1_6_bam_alignment_optionalfields_hopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
bam_v1_6_bam_alignment_optionalfields_hopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_bopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. Maybe a
Nothing
                            }
                          BAM_V1_6_BAM_Alignment_OptionalFields
-> Seq BAM_V1_6_BAM_Alignment_OptionalFields
-> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. a -> Seq a -> Seq a
DSeq.:<|
                          ByteString -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
parse_OptionalFields ( Word8 -> ByteString -> ByteString
dropUpTo Word8
0x00
                                                          ByteString
bs
                                               )
                        Bool
False ->
                          [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error ([Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields)
-> [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
                            BAM_V1_6_Read_Error -> [Char]
forall a. Show a => a -> [Char]
show BAM_V1_6_Read_Error
BAM_V1_6_Read_Error_Alignment_OptionalFields_Remaining_Bytes
                -- HOPT <-> 'H'
                Just Word8
0x48 ->
                  case ( Parser BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
-> ByteString -> Result BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
forall a. Parser a -> ByteString -> Result a
DABL.parse Parser BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
parse_BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
                                    ( ByteString -> ByteString
DB.fromStrict (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$
                                        Word8 -> ByteString -> ByteString
takeUpTo Word8
0x00
                                                 ByteString
bs
                                    )
                       ) of
                    Fail ByteString
_
                         [[Char]]
ctxs
                         [Char]
err ->
                      [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error  ([Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields)
-> [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
                        [Char] -> [Char]
forall a. Show a => a -> [Char]
show ([Char] -> [Char]) -> [Char] -> [Char]
forall a b. (a -> b) -> a -> b
$ [Char]
"Error while parsing HOPT field." [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
"\n"                              [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
"Parsing contexts: "              [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               ([Char] -> [[Char]] -> [Char]
forall a. [a] -> [[a]] -> [a]
intercalate [Char]
", " [[Char]]
ctxs)           [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
"\n"                              [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
"Error message: "                 [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                               [Char]
err
                    Done ByteString
remainingbytes
                         BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
parsedbs -> do
                      let strictremainingbytes :: ByteString
strictremainingbytes = ByteString -> ByteString
DB.toStrict ByteString
remainingbytes
                      case ByteString -> Bool
DB.null ByteString
strictremainingbytes of
                        Bool
True  ->
                          BAM_V1_6_BAM_Alignment_OptionalFields
                            { bam_v1_6_bam_alignment_optionalfields_aopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
bam_v1_6_bam_alignment_optionalfields_aopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_smallcopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
bam_v1_6_bam_alignment_optionalfields_smallcopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_bigcopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
bam_v1_6_bam_alignment_optionalfields_bigcopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_smalliopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
bam_v1_6_bam_alignment_optionalfields_smalliopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_bigiopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
bam_v1_6_bam_alignment_optionalfields_bigiopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_smallsopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
bam_v1_6_bam_alignment_optionalfields_smallsopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_bigsopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
bam_v1_6_bam_alignment_optionalfields_bigsopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_fopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
bam_v1_6_bam_alignment_optionalfields_fopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_zopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
bam_v1_6_bam_alignment_optionalfields_zopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
forall a. Maybe a
Nothing
                            , bam_v1_6_bam_alignment_optionalfields_hopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
bam_v1_6_bam_alignment_optionalfields_hopt        = BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
forall a. a -> Maybe a
Just BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
parsedbs
                            , bam_v1_6_bam_alignment_optionalfields_bopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. Maybe a
Nothing
                            }
                          BAM_V1_6_BAM_Alignment_OptionalFields
-> Seq BAM_V1_6_BAM_Alignment_OptionalFields
-> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. a -> Seq a -> Seq a
DSeq.:<|
                          ByteString -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
parse_OptionalFields ( Word8 -> ByteString -> ByteString
dropUpTo Word8
0x00
                                                          ByteString
bs
                                               )
                        Bool
False ->
                          [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error ([Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields)
-> [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
                            BAM_V1_6_Read_Error -> [Char]
forall a. Show a => a -> [Char]
show BAM_V1_6_Read_Error
BAM_V1_6_Read_Error_Alignment_OptionalFields_Remaining_Bytes
                -- BOPT <-> 'B'
                Just Word8
0x42 ->
                  case ByteString -> Int -> Maybe Word8
DB.indexMaybe ByteString
bs Int
3 of
                    Maybe Word8
Nothing            ->
                      [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error ([Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields)
-> [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
                        BAM_V1_6_Read_Error -> [Char]
forall a. Show a => a -> [Char]
show BAM_V1_6_Read_Error
BAM_V1_6_Read_Error_Alignment_OptionalFields_Missing_Type
                    Just Word8
boptcharacter ->
                      case Word8
boptcharacter of
                        -- 'c'
                        Word8
0x63 -> do
                          let boptcount :: Int
boptcount = Word32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral       (Word32 -> Int) -> Word32 -> Int
forall a b. (a -> b) -> a -> b
$
                                            [Word8] -> Word32
word8sToWord32LE ([Word8] -> Word32) -> [Word8] -> Word32
forall a b. (a -> b) -> a -> b
$
                                              ByteString -> [Word8]
DB.unpack      (ByteString -> [Word8]) -> ByteString -> [Word8]
forall a b. (a -> b) -> a -> b
$
                                                Int -> ByteString -> ByteString
DB.take Int
4    (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                  Int -> ByteString -> ByteString
DB.drop Int
4
                                                          ByteString
bs
                          case ( Parser BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> ByteString -> Result BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. Parser a -> ByteString -> Result a
DABL.parse Parser BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
parse_BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
                                            ( ByteString -> ByteString
DB.fromStrict (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                Int -> ByteString -> ByteString
DB.take
                                                  ( ( Int
boptcount Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
1
                                                    ) Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
8
                                                  )
                                                  ByteString
bs
                                            )
                               ) of
                            Fail ByteString
_
                                 [[Char]]
ctxs
                                 [Char]
err ->
                              [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error  ([Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields)
-> [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
                                [Char] -> [Char]
forall a. Show a => a -> [Char]
show ([Char] -> [Char]) -> [Char] -> [Char]
forall a b. (a -> b) -> a -> b
$ [Char]
"Error while parsing BOPT field." [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                                       [Char]
"\n"                              [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                                       [Char]
"Parsing contexts: "              [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                                       ([Char] -> [[Char]] -> [Char]
forall a. [a] -> [[a]] -> [a]
intercalate [Char]
", " [[Char]]
ctxs)           [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                                       [Char]
"\n"                              [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                                       [Char]
"Error message: "                 [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                                       [Char]
err
                            Done ByteString
remainingbytes
                                 BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
parsedbs -> do
                              let strictremainingbytes :: ByteString
strictremainingbytes = ByteString -> ByteString
DB.toStrict ByteString
remainingbytes
                              case ByteString -> Bool
DB.null ByteString
strictremainingbytes of
                                Bool
True  ->
                                  BAM_V1_6_BAM_Alignment_OptionalFields
                                    { bam_v1_6_bam_alignment_optionalfields_aopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
bam_v1_6_bam_alignment_optionalfields_aopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_smallcopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
bam_v1_6_bam_alignment_optionalfields_smallcopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_bigcopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
bam_v1_6_bam_alignment_optionalfields_bigcopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_smalliopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
bam_v1_6_bam_alignment_optionalfields_smalliopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_bigiopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
bam_v1_6_bam_alignment_optionalfields_bigiopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_smallsopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
bam_v1_6_bam_alignment_optionalfields_smallsopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_bigsopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
bam_v1_6_bam_alignment_optionalfields_bigsopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_fopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
bam_v1_6_bam_alignment_optionalfields_fopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_zopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
bam_v1_6_bam_alignment_optionalfields_zopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_hopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
bam_v1_6_bam_alignment_optionalfields_hopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_bopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt        = BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. a -> Maybe a
Just BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
parsedbs
                                    }
                                  BAM_V1_6_BAM_Alignment_OptionalFields
-> Seq BAM_V1_6_BAM_Alignment_OptionalFields
-> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. a -> Seq a -> Seq a
DSeq.:<|
                                  ByteString -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
parse_OptionalFields ( Int -> ByteString -> ByteString
DB.drop ( ( Int
boptcount Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
1
                                                                   ) Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
8
                                                                 )
                                                                 ByteString
bs
                                                       )
                                Bool
False ->
                                  [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error ([Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields)
-> [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
                                    BAM_V1_6_Read_Error -> [Char]
forall a. Show a => a -> [Char]
show BAM_V1_6_Read_Error
BAM_V1_6_Read_Error_Alignment_OptionalFields_Remaining_Bytes
                        -- 'C'
                        Word8
0x43 -> do
                          let boptcount :: Int
boptcount = Word32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral       (Word32 -> Int) -> Word32 -> Int
forall a b. (a -> b) -> a -> b
$
                                            [Word8] -> Word32
word8sToWord32LE ([Word8] -> Word32) -> [Word8] -> Word32
forall a b. (a -> b) -> a -> b
$
                                              ByteString -> [Word8]
DB.unpack      (ByteString -> [Word8]) -> ByteString -> [Word8]
forall a b. (a -> b) -> a -> b
$
                                                Int -> ByteString -> ByteString
DB.take Int
4    (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                  Int -> ByteString -> ByteString
DB.drop Int
4
                                                          ByteString
bs
                          case ( Parser BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> ByteString -> Result BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. Parser a -> ByteString -> Result a
DABL.parse Parser BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
parse_BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
                                            ( ByteString -> ByteString
DB.fromStrict (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                Int -> ByteString -> ByteString
DB.take
                                                  ( ( Int
boptcount Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
1
                                                    ) Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
8
                                                  )
                                                  ByteString
bs
                                            )
                               ) of
                            Fail ByteString
_
                                 [[Char]]
ctxs
                                 [Char]
err ->
                              [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error  ([Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields)
-> [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
                                [Char] -> [Char]
forall a. Show a => a -> [Char]
show ([Char] -> [Char]) -> [Char] -> [Char]
forall a b. (a -> b) -> a -> b
$ [Char]
"Error while parsing BOPT field." [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                                       [Char]
"\n"                              [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                                       [Char]
"Parsing contexts: "              [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                                       ([Char] -> [[Char]] -> [Char]
forall a. [a] -> [[a]] -> [a]
intercalate [Char]
", " [[Char]]
ctxs)           [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                                       [Char]
"\n"                              [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                                       [Char]
"Error message: "                 [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                                       [Char]
err
                            Done ByteString
remainingbytes
                                 BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
parsedbs -> do
                              let strictremainingbytes :: ByteString
strictremainingbytes = ByteString -> ByteString
DB.toStrict ByteString
remainingbytes
                              case ByteString -> Bool
DB.null ByteString
strictremainingbytes of
                                Bool
True  ->
                                  BAM_V1_6_BAM_Alignment_OptionalFields
                                    { bam_v1_6_bam_alignment_optionalfields_aopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
bam_v1_6_bam_alignment_optionalfields_aopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_smallcopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
bam_v1_6_bam_alignment_optionalfields_smallcopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_bigcopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
bam_v1_6_bam_alignment_optionalfields_bigcopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_smalliopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
bam_v1_6_bam_alignment_optionalfields_smalliopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_bigiopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
bam_v1_6_bam_alignment_optionalfields_bigiopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_smallsopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
bam_v1_6_bam_alignment_optionalfields_smallsopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_bigsopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
bam_v1_6_bam_alignment_optionalfields_bigsopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_fopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
bam_v1_6_bam_alignment_optionalfields_fopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_zopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
bam_v1_6_bam_alignment_optionalfields_zopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_hopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
bam_v1_6_bam_alignment_optionalfields_hopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_bopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt        = BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. a -> Maybe a
Just BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
parsedbs
                                    }
                                  BAM_V1_6_BAM_Alignment_OptionalFields
-> Seq BAM_V1_6_BAM_Alignment_OptionalFields
-> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. a -> Seq a -> Seq a
DSeq.:<|
                                  ByteString -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
parse_OptionalFields ( Int -> ByteString -> ByteString
DB.drop ( ( Int
boptcount Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
1
                                                                   ) Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
8
                                                                 )
                                                                 ByteString
bs
                                                       )
                                Bool
False ->
                                  [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error ([Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields)
-> [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
                                    BAM_V1_6_Read_Error -> [Char]
forall a. Show a => a -> [Char]
show BAM_V1_6_Read_Error
BAM_V1_6_Read_Error_Alignment_OptionalFields_Remaining_Bytes
                        -- 'i'
                        Word8
0x69 -> do
                          let boptcount :: Int
boptcount = Word32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral       (Word32 -> Int) -> Word32 -> Int
forall a b. (a -> b) -> a -> b
$
                                            [Word8] -> Word32
word8sToWord32LE ([Word8] -> Word32) -> [Word8] -> Word32
forall a b. (a -> b) -> a -> b
$
                                              ByteString -> [Word8]
DB.unpack      (ByteString -> [Word8]) -> ByteString -> [Word8]
forall a b. (a -> b) -> a -> b
$
                                                Int -> ByteString -> ByteString
DB.take Int
4    (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                  Int -> ByteString -> ByteString
DB.drop Int
4
                                                          ByteString
bs
                          case ( Parser BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> ByteString -> Result BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. Parser a -> ByteString -> Result a
DABL.parse Parser BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
parse_BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
                                            ( ByteString -> ByteString
DB.fromStrict (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                Int -> ByteString -> ByteString
DB.take
                                                  ( ( Int
boptcount Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
4
                                                    ) Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
8
                                                  )
                                                  ByteString
bs
                                            )
                               ) of
                            Fail ByteString
_
                                 [[Char]]
ctxs
                                 [Char]
err ->
                              [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error  ([Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields)
-> [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
                                [Char] -> [Char]
forall a. Show a => a -> [Char]
show ([Char] -> [Char]) -> [Char] -> [Char]
forall a b. (a -> b) -> a -> b
$ [Char]
"Error while parsing BOPT field." [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                                       [Char]
"\n"                              [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                                       [Char]
"Parsing contexts: "              [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                                       ([Char] -> [[Char]] -> [Char]
forall a. [a] -> [[a]] -> [a]
intercalate [Char]
", " [[Char]]
ctxs)           [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                                       [Char]
"\n"                              [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                                       [Char]
"Error message: "                 [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                                       [Char]
err
                            Done ByteString
remainingbytes
                                 BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
parsedbs -> do
                              let strictremainingbytes :: ByteString
strictremainingbytes = ByteString -> ByteString
DB.toStrict ByteString
remainingbytes
                              case ByteString -> Bool
DB.null ByteString
strictremainingbytes of
                                Bool
True  ->
                                  BAM_V1_6_BAM_Alignment_OptionalFields
                                    { bam_v1_6_bam_alignment_optionalfields_aopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
bam_v1_6_bam_alignment_optionalfields_aopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_smallcopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
bam_v1_6_bam_alignment_optionalfields_smallcopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_bigcopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
bam_v1_6_bam_alignment_optionalfields_bigcopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_smalliopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
bam_v1_6_bam_alignment_optionalfields_smalliopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_bigiopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
bam_v1_6_bam_alignment_optionalfields_bigiopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_smallsopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
bam_v1_6_bam_alignment_optionalfields_smallsopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_bigsopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
bam_v1_6_bam_alignment_optionalfields_bigsopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_fopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
bam_v1_6_bam_alignment_optionalfields_fopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_zopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
bam_v1_6_bam_alignment_optionalfields_zopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_hopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
bam_v1_6_bam_alignment_optionalfields_hopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_bopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt        = BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. a -> Maybe a
Just BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
parsedbs
                                    }
                                  BAM_V1_6_BAM_Alignment_OptionalFields
-> Seq BAM_V1_6_BAM_Alignment_OptionalFields
-> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. a -> Seq a -> Seq a
DSeq.:<|
                                  ByteString -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
parse_OptionalFields ( Int -> ByteString -> ByteString
DB.drop ( ( Int
boptcount Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
4
                                                                   ) Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
8
                                                                 )
                                                                 ByteString
bs
                                                       )
                                Bool
False ->
                                  [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error ([Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields)
-> [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
                                    BAM_V1_6_Read_Error -> [Char]
forall a. Show a => a -> [Char]
show BAM_V1_6_Read_Error
BAM_V1_6_Read_Error_Alignment_OptionalFields_Remaining_Bytes
                        -- 'I'
                        Word8
0x49 -> do
                          let boptcount :: Int
boptcount = Word32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral       (Word32 -> Int) -> Word32 -> Int
forall a b. (a -> b) -> a -> b
$
                                            [Word8] -> Word32
word8sToWord32LE ([Word8] -> Word32) -> [Word8] -> Word32
forall a b. (a -> b) -> a -> b
$
                                              ByteString -> [Word8]
DB.unpack      (ByteString -> [Word8]) -> ByteString -> [Word8]
forall a b. (a -> b) -> a -> b
$
                                                Int -> ByteString -> ByteString
DB.take Int
4    (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                  Int -> ByteString -> ByteString
DB.drop Int
4
                                                          ByteString
bs
                          case ( Parser BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> ByteString -> Result BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. Parser a -> ByteString -> Result a
DABL.parse Parser BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
parse_BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
                                            ( ByteString -> ByteString
DB.fromStrict (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                Int -> ByteString -> ByteString
DB.take
                                                  ( ( Int
boptcount Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
4
                                                    ) Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
8
                                                  )
                                                  ByteString
bs
                                            )
                               ) of
                            Fail ByteString
_
                                 [[Char]]
ctxs
                                 [Char]
err ->
                              [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error  ([Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields)
-> [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
                                [Char] -> [Char]
forall a. Show a => a -> [Char]
show ([Char] -> [Char]) -> [Char] -> [Char]
forall a b. (a -> b) -> a -> b
$ [Char]
"Error while parsing BOPT field." [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                                       [Char]
"\n"                              [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                                       [Char]
"Parsing contexts: "              [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                                       ([Char] -> [[Char]] -> [Char]
forall a. [a] -> [[a]] -> [a]
intercalate [Char]
", " [[Char]]
ctxs)           [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                                       [Char]
"\n"                              [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                                       [Char]
"Error message: "                 [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                                       [Char]
err
                            Done ByteString
remainingbytes
                                 BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
parsedbs -> do
                              let strictremainingbytes :: ByteString
strictremainingbytes = ByteString -> ByteString
DB.toStrict ByteString
remainingbytes
                              case ByteString -> Bool
DB.null ByteString
strictremainingbytes of
                                Bool
True  ->
                                  BAM_V1_6_BAM_Alignment_OptionalFields
                                    { bam_v1_6_bam_alignment_optionalfields_aopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
bam_v1_6_bam_alignment_optionalfields_aopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_smallcopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
bam_v1_6_bam_alignment_optionalfields_smallcopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_bigcopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
bam_v1_6_bam_alignment_optionalfields_bigcopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_smalliopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
bam_v1_6_bam_alignment_optionalfields_smalliopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_bigiopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
bam_v1_6_bam_alignment_optionalfields_bigiopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_smallsopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
bam_v1_6_bam_alignment_optionalfields_smallsopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_bigsopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
bam_v1_6_bam_alignment_optionalfields_bigsopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_fopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
bam_v1_6_bam_alignment_optionalfields_fopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_zopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
bam_v1_6_bam_alignment_optionalfields_zopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_hopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
bam_v1_6_bam_alignment_optionalfields_hopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_bopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt        = BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. a -> Maybe a
Just BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
parsedbs
                                    }
                                  BAM_V1_6_BAM_Alignment_OptionalFields
-> Seq BAM_V1_6_BAM_Alignment_OptionalFields
-> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. a -> Seq a -> Seq a
DSeq.:<|
                                  ByteString -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
parse_OptionalFields ( Int -> ByteString -> ByteString
DB.drop ( ( Int
boptcount Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
4
                                                                   ) Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
8
                                                                 )
                                                                 ByteString
bs
                                                       )
                                Bool
False ->
                                  [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error ([Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields)
-> [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
                                    BAM_V1_6_Read_Error -> [Char]
forall a. Show a => a -> [Char]
show BAM_V1_6_Read_Error
BAM_V1_6_Read_Error_Alignment_OptionalFields_Remaining_Bytes
                        -- 's'
                        Word8
0x73 -> do
                          let boptcount :: Int
boptcount = Word32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral       (Word32 -> Int) -> Word32 -> Int
forall a b. (a -> b) -> a -> b
$
                                            [Word8] -> Word32
word8sToWord32LE ([Word8] -> Word32) -> [Word8] -> Word32
forall a b. (a -> b) -> a -> b
$
                                              ByteString -> [Word8]
DB.unpack      (ByteString -> [Word8]) -> ByteString -> [Word8]
forall a b. (a -> b) -> a -> b
$
                                                Int -> ByteString -> ByteString
DB.take Int
4    (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                  Int -> ByteString -> ByteString
DB.drop Int
4
                                                          ByteString
bs
                          case ( Parser BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> ByteString -> Result BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. Parser a -> ByteString -> Result a
DABL.parse Parser BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
parse_BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
                                            ( ByteString -> ByteString
DB.fromStrict (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                Int -> ByteString -> ByteString
DB.take
                                                  ( ( Int
boptcount Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
2
                                                    ) Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
8
                                                  )
                                                  ByteString
bs
                                            )
                               ) of
                            Fail ByteString
_
                                 [[Char]]
ctxs
                                 [Char]
err ->
                              [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error  ([Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields)
-> [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
                                [Char] -> [Char]
forall a. Show a => a -> [Char]
show ([Char] -> [Char]) -> [Char] -> [Char]
forall a b. (a -> b) -> a -> b
$ [Char]
"Error while parsing BOPT field." [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                                       [Char]
"\n"                              [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                                       [Char]
"Parsing contexts: "              [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                                       ([Char] -> [[Char]] -> [Char]
forall a. [a] -> [[a]] -> [a]
intercalate [Char]
", " [[Char]]
ctxs)           [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                                       [Char]
"\n"                              [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                                       [Char]
"Error message: "                 [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                                       [Char]
err
                            Done ByteString
remainingbytes
                                 BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
parsedbs -> do
                              let strictremainingbytes :: ByteString
strictremainingbytes = ByteString -> ByteString
DB.toStrict ByteString
remainingbytes
                              case ByteString -> Bool
DB.null ByteString
strictremainingbytes of
                                Bool
True  ->
                                  BAM_V1_6_BAM_Alignment_OptionalFields
                                    { bam_v1_6_bam_alignment_optionalfields_aopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
bam_v1_6_bam_alignment_optionalfields_aopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_smallcopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
bam_v1_6_bam_alignment_optionalfields_smallcopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_bigcopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
bam_v1_6_bam_alignment_optionalfields_bigcopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_smalliopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
bam_v1_6_bam_alignment_optionalfields_smalliopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_bigiopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
bam_v1_6_bam_alignment_optionalfields_bigiopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_smallsopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
bam_v1_6_bam_alignment_optionalfields_smallsopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_bigsopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
bam_v1_6_bam_alignment_optionalfields_bigsopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_fopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
bam_v1_6_bam_alignment_optionalfields_fopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_zopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
bam_v1_6_bam_alignment_optionalfields_zopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_hopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
bam_v1_6_bam_alignment_optionalfields_hopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_bopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt        = BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. a -> Maybe a
Just BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
parsedbs
                                    }
                                  BAM_V1_6_BAM_Alignment_OptionalFields
-> Seq BAM_V1_6_BAM_Alignment_OptionalFields
-> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. a -> Seq a -> Seq a
DSeq.:<|
                                  ByteString -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
parse_OptionalFields ( Int -> ByteString -> ByteString
DB.drop ( ( Int
boptcount Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
2
                                                                   ) Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
8
                                                                 )
                                                                 ByteString
bs
                                                       )
                                Bool
False ->
                                  [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error ([Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields)
-> [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
                                    BAM_V1_6_Read_Error -> [Char]
forall a. Show a => a -> [Char]
show BAM_V1_6_Read_Error
BAM_V1_6_Read_Error_Alignment_OptionalFields_Remaining_Bytes
                        -- 'S'
                        Word8
0x53 -> do
                          let boptcount :: Int
boptcount = Word32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral       (Word32 -> Int) -> Word32 -> Int
forall a b. (a -> b) -> a -> b
$
                                            [Word8] -> Word32
word8sToWord32LE ([Word8] -> Word32) -> [Word8] -> Word32
forall a b. (a -> b) -> a -> b
$
                                              ByteString -> [Word8]
DB.unpack      (ByteString -> [Word8]) -> ByteString -> [Word8]
forall a b. (a -> b) -> a -> b
$
                                                Int -> ByteString -> ByteString
DB.take Int
4    (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                  Int -> ByteString -> ByteString
DB.drop Int
4
                                                          ByteString
bs
                          case ( Parser BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> ByteString -> Result BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. Parser a -> ByteString -> Result a
DABL.parse Parser BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
parse_BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
                                            ( ByteString -> ByteString
DB.fromStrict (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                Int -> ByteString -> ByteString
DB.take
                                                  ( ( Int
boptcount Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
2
                                                    ) Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
8
                                                  )
                                                  ByteString
bs
                                            )
                               ) of
                            Fail ByteString
_
                                 [[Char]]
ctxs
                                 [Char]
err ->
                              [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error  ([Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields)
-> [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
                                [Char] -> [Char]
forall a. Show a => a -> [Char]
show ([Char] -> [Char]) -> [Char] -> [Char]
forall a b. (a -> b) -> a -> b
$ [Char]
"Error while parsing BOPT field." [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                                       [Char]
"\n"                              [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                                       [Char]
"Parsing contexts: "              [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                                       ([Char] -> [[Char]] -> [Char]
forall a. [a] -> [[a]] -> [a]
intercalate [Char]
", " [[Char]]
ctxs)           [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                                       [Char]
"\n"                              [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                                       [Char]
"Error message: "                 [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                                       [Char]
err
                            Done ByteString
remainingbytes
                                 BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
parsedbs -> do
                              let strictremainingbytes :: ByteString
strictremainingbytes = ByteString -> ByteString
DB.toStrict ByteString
remainingbytes
                              case ByteString -> Bool
DB.null ByteString
strictremainingbytes of
                                Bool
True  ->
                                  BAM_V1_6_BAM_Alignment_OptionalFields
                                    { bam_v1_6_bam_alignment_optionalfields_aopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
bam_v1_6_bam_alignment_optionalfields_aopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_smallcopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
bam_v1_6_bam_alignment_optionalfields_smallcopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_bigcopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
bam_v1_6_bam_alignment_optionalfields_bigcopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_smalliopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
bam_v1_6_bam_alignment_optionalfields_smalliopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_bigiopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
bam_v1_6_bam_alignment_optionalfields_bigiopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_smallsopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
bam_v1_6_bam_alignment_optionalfields_smallsopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_bigsopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
bam_v1_6_bam_alignment_optionalfields_bigsopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_fopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
bam_v1_6_bam_alignment_optionalfields_fopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_zopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
bam_v1_6_bam_alignment_optionalfields_zopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_hopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
bam_v1_6_bam_alignment_optionalfields_hopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_bopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt        = BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. a -> Maybe a
Just BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
parsedbs
                                    }
                                  BAM_V1_6_BAM_Alignment_OptionalFields
-> Seq BAM_V1_6_BAM_Alignment_OptionalFields
-> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. a -> Seq a -> Seq a
DSeq.:<|
                                  ByteString -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
parse_OptionalFields ( Int -> ByteString -> ByteString
DB.drop ( ( Int
boptcount Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
2
                                                                   ) Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
8
                                                                 )
                                                                 ByteString
bs
                                                       )
                                Bool
False ->
                                  [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error ([Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields)
-> [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
                                    BAM_V1_6_Read_Error -> [Char]
forall a. Show a => a -> [Char]
show BAM_V1_6_Read_Error
BAM_V1_6_Read_Error_Alignment_OptionalFields_Remaining_Bytes
                        -- 'f'
                        Word8
0x66 -> do
                          let boptcount :: Int
boptcount = Word32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral       (Word32 -> Int) -> Word32 -> Int
forall a b. (a -> b) -> a -> b
$
                                            [Word8] -> Word32
word8sToWord32LE ([Word8] -> Word32) -> [Word8] -> Word32
forall a b. (a -> b) -> a -> b
$
                                              ByteString -> [Word8]
DB.unpack      (ByteString -> [Word8]) -> ByteString -> [Word8]
forall a b. (a -> b) -> a -> b
$
                                                Int -> ByteString -> ByteString
DB.take Int
4    (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                  Int -> ByteString -> ByteString
DB.drop Int
4
                                                          ByteString
bs
                          case ( Parser BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> ByteString -> Result BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. Parser a -> ByteString -> Result a
DABL.parse Parser BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
parse_BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
                                            ( ByteString -> ByteString
DB.fromStrict (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$
                                                Int -> ByteString -> ByteString
DB.take
                                                  ( ( Int
boptcount Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
4
                                                    ) Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
8
                                                  )
                                                  ByteString
bs
                                            )
                               ) of
                            Fail ByteString
_
                                 [[Char]]
ctxs
                                 [Char]
err ->
                              [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error  ([Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields)
-> [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
                                [Char] -> [Char]
forall a. Show a => a -> [Char]
show ([Char] -> [Char]) -> [Char] -> [Char]
forall a b. (a -> b) -> a -> b
$ [Char]
"Error while parsing BOPT field." [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                                       [Char]
"\n"                              [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                                       [Char]
"Parsing contexts: "              [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                                       ([Char] -> [[Char]] -> [Char]
forall a. [a] -> [[a]] -> [a]
intercalate [Char]
", " [[Char]]
ctxs)           [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                                       [Char]
"\n"                              [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                                       [Char]
"Error message: "                 [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
                                       [Char]
err
                            Done ByteString
remainingbytes
                                 BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
parsedbs -> do
                              let strictremainingbytes :: ByteString
strictremainingbytes = ByteString -> ByteString
DB.toStrict ByteString
remainingbytes
                              case ByteString -> Bool
DB.null ByteString
strictremainingbytes of
                                Bool
True  ->
                                  BAM_V1_6_BAM_Alignment_OptionalFields
                                    { bam_v1_6_bam_alignment_optionalfields_aopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
bam_v1_6_bam_alignment_optionalfields_aopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_AOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_smallcopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
bam_v1_6_bam_alignment_optionalfields_smallcopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallCOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_bigcopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
bam_v1_6_bam_alignment_optionalfields_bigcopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigCOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_smalliopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
bam_v1_6_bam_alignment_optionalfields_smalliopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallIOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_bigiopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
bam_v1_6_bam_alignment_optionalfields_bigiopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigIOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_smallsopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
bam_v1_6_bam_alignment_optionalfields_smallsopt   = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_SmallSOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_bigsopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
bam_v1_6_bam_alignment_optionalfields_bigsopt     = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BigSOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_fopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
bam_v1_6_bam_alignment_optionalfields_fopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_FOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_zopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
bam_v1_6_bam_alignment_optionalfields_zopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_ZOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_hopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
bam_v1_6_bam_alignment_optionalfields_hopt        = Maybe BAM_V1_6_BAM_Alignment_OptionalFields_HOPT
forall a. Maybe a
Nothing
                                    , bam_v1_6_bam_alignment_optionalfields_bopt :: Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
bam_v1_6_bam_alignment_optionalfields_bopt        = BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
-> Maybe BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
forall a. a -> Maybe a
Just BAM_V1_6_BAM_Alignment_OptionalFields_BOPT
parsedbs
                                    }
                                  BAM_V1_6_BAM_Alignment_OptionalFields
-> Seq BAM_V1_6_BAM_Alignment_OptionalFields
-> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. a -> Seq a -> Seq a
DSeq.:<|
                                  ByteString -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
parse_OptionalFields ( Int -> ByteString -> ByteString
DB.drop ( ( Int
boptcount Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
4
                                                                   ) Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
8
                                                                 )
                                                                 ByteString
bs
                                                       )
                                Bool
False ->
                                  [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error ([Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields)
-> [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
                                    BAM_V1_6_Read_Error -> [Char]
forall a. Show a => a -> [Char]
show BAM_V1_6_Read_Error
BAM_V1_6_Read_Error_Alignment_OptionalFields_Remaining_Bytes
                        Word8
_    ->
                          [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error ([Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields)
-> [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
                            BAM_V1_6_Read_Error -> [Char]
forall a. Show a => a -> [Char]
show BAM_V1_6_Read_Error
BAM_V1_6_Read_Error_Alignment_OptionalFields_BOPT_Missing_Type
                Maybe Word8
_         ->
                  [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error ([Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields)
-> [Char] -> Seq BAM_V1_6_BAM_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
                    BAM_V1_6_Read_Error -> [Char]
forall a. Show a => a -> [Char]
show BAM_V1_6_Read_Error
BAM_V1_6_Read_Error_Alignment_OptionalFields_Missing_Type