{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TypeFamilies #-}
module Data.BAM.Version1_6.Read.Parser.BAM.Base (
parse_BAM_V1_6_BAM
) where
import Data.BAM.Version1_6.Internal
import Data.BAM.Version1_6.BAM
import Data.BAM.Version1_6.Read.Parser.BAM.BAMAlignments
import Data.BAM.Version1_6.Read.Parser.BAM.BAMHeader
import Data.Attoparsec.ByteString.Lazy as DABL
parse_BAM_V1_6_BAM :: Parser BAM_V1_6_BAM
parse_BAM_V1_6_BAM :: Parser BAM_V1_6_BAM
parse_BAM_V1_6_BAM = do
Maybe Word8
emptycdatablock <-
Parser (Maybe Word8)
peekWord8
case Maybe Word8
emptycdatablock of
Maybe Word8
Nothing ->
BAM_V1_6_BAM -> Parser BAM_V1_6_BAM
forall a. a -> Parser ByteString a
forall (m :: * -> *) a. Monad m => a -> m a
return BAM_V1_6_BAM
{ bam_v1_6_bam_bamheader :: Maybe BAM_V1_6_BAM_BAMHeader
bam_v1_6_bam_bamheader = Maybe BAM_V1_6_BAM_BAMHeader
forall a. Maybe a
Nothing
, bam_v1_6_bam_bamalignments :: Maybe BAM_V1_6_BAM_BAMAlignments
bam_v1_6_bam_bamalignments = Maybe BAM_V1_6_BAM_BAMAlignments
forall a. Maybe a
Nothing
, bam_v1_6_bam_endoffilemarker :: Bool
bam_v1_6_bam_endoffilemarker = Bool
True
}
Just Word8
_ -> do
Maybe BAM_V1_6_BAM_BAMHeader
header <-
Parser BAM_V1_6_BAM_BAMHeader
-> Parser (Maybe BAM_V1_6_BAM_BAMHeader)
forall a. Parser a -> Parser (Maybe a)
maybeOption Parser BAM_V1_6_BAM_BAMHeader
parse_BAM_V1_6_BAM_BAMHeader
case Maybe BAM_V1_6_BAM_BAMHeader
header of
Maybe BAM_V1_6_BAM_BAMHeader
Nothing -> do
BAM_V1_6_BAM_BAMAlignments
alignments <-
Parser BAM_V1_6_BAM_BAMAlignments
parse_BAM_V1_6_BAM_BAMAlignments
BAM_V1_6_BAM -> Parser BAM_V1_6_BAM
forall a. a -> Parser ByteString a
forall (m :: * -> *) a. Monad m => a -> m a
return BAM_V1_6_BAM
{ bam_v1_6_bam_bamheader :: Maybe BAM_V1_6_BAM_BAMHeader
bam_v1_6_bam_bamheader = Maybe BAM_V1_6_BAM_BAMHeader
forall a. Maybe a
Nothing
, bam_v1_6_bam_bamalignments :: Maybe BAM_V1_6_BAM_BAMAlignments
bam_v1_6_bam_bamalignments = BAM_V1_6_BAM_BAMAlignments -> Maybe BAM_V1_6_BAM_BAMAlignments
forall a. a -> Maybe a
Just BAM_V1_6_BAM_BAMAlignments
alignments
, bam_v1_6_bam_endoffilemarker :: Bool
bam_v1_6_bam_endoffilemarker = Bool
False
}
Just BAM_V1_6_BAM_BAMHeader
header' ->
BAM_V1_6_BAM -> Parser BAM_V1_6_BAM
forall a. a -> Parser ByteString a
forall (m :: * -> *) a. Monad m => a -> m a
return BAM_V1_6_BAM
{ bam_v1_6_bam_bamheader :: Maybe BAM_V1_6_BAM_BAMHeader
bam_v1_6_bam_bamheader = BAM_V1_6_BAM_BAMHeader -> Maybe BAM_V1_6_BAM_BAMHeader
forall a. a -> Maybe a
Just BAM_V1_6_BAM_BAMHeader
header'
, bam_v1_6_bam_bamalignments :: Maybe BAM_V1_6_BAM_BAMAlignments
bam_v1_6_bam_bamalignments = Maybe BAM_V1_6_BAM_BAMAlignments
forall a. Maybe a
Nothing
, bam_v1_6_bam_endoffilemarker :: Bool
bam_v1_6_bam_endoffilemarker = Bool
False
}