{-# OPTIONS_GHC -fno-warn-orphans #-}
module Bio.FASTA.Parser
( fastaP
, fastaPGeneric
, fastaLine
, modificationP
) where
import Bio.FASTA.Type (Fasta, FastaItem (..), ModItem (..), Modification (..),
ParsableFastaToken (..))
import Bio.Sequence (BareSequence, bareSequence)
import Control.Applicative ((<|>))
import Data.Attoparsec.Text (Parser, char, choice, endOfInput, endOfLine, many', many1', satisfy,
skipWhile, space, string, takeWhile, try)
import Data.Char (isAlphaNum, isLetter, isSpace)
import Data.Text (Text, strip)
import Prelude hiding (takeWhile)
instance ParsableFastaToken Char where
parseToken :: (Char -> Bool) -> Parser Char
parseToken = (Char -> Bool) -> Parser Char
satisfy
instance ParsableFastaToken ModItem where
parseToken :: (Char -> Bool) -> Parser ModItem
parseToken Char -> Bool
predicate = (Modification -> ModItem
Mod (Modification -> ModItem)
-> Parser Text Modification -> Parser ModItem
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Text Modification
modificationP) Parser ModItem -> Parser ModItem -> Parser ModItem
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> (Char -> ModItem
Letter (Char -> ModItem) -> Parser Char -> Parser ModItem
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Char -> Bool) -> Parser Char
satisfy Char -> Bool
predicate)
fastaP :: ParsableFastaToken a => Parser (Fasta a)
fastaP :: Parser (Fasta a)
fastaP = Parser Char -> Parser Text [Char]
forall (m :: * -> *) a. MonadPlus m => m a -> m [a]
many' Parser Char
space Parser Text [Char] -> Parser (Fasta a) -> Parser (Fasta a)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> (Char -> Bool) -> Parser (Fasta a)
forall a.
ParsableFastaToken a =>
(Char -> Bool) -> Parser (Fasta a)
fastaPGeneric Char -> Bool
isLetter
fastaPGeneric :: ParsableFastaToken a => (Char -> Bool) -> Parser (Fasta a)
fastaPGeneric :: (Char -> Bool) -> Parser (Fasta a)
fastaPGeneric = Parser Text (FastaItem a) -> Parser (Fasta a)
forall (m :: * -> *) a. MonadPlus m => m a -> m [a]
many' (Parser Text (FastaItem a) -> Parser (Fasta a))
-> ((Char -> Bool) -> Parser Text (FastaItem a))
-> (Char -> Bool)
-> Parser (Fasta a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Char -> Bool) -> Parser Text (FastaItem a)
forall a.
ParsableFastaToken a =>
(Char -> Bool) -> Parser (FastaItem a)
item
item :: ParsableFastaToken a => (Char -> Bool) -> Parser (FastaItem a)
item :: (Char -> Bool) -> Parser (FastaItem a)
item Char -> Bool
predicate = (Text -> BareSequence a -> FastaItem a
forall a. Text -> BareSequence a -> FastaItem a
FastaItem (Text -> BareSequence a -> FastaItem a)
-> Parser Text Text -> Parser Text (BareSequence a -> FastaItem a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Text Text
seqName Parser Text (BareSequence a -> FastaItem a)
-> Parser Text (BareSequence a) -> Parser (FastaItem a)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Char -> Bool) -> Parser Text (BareSequence a)
forall a.
ParsableFastaToken a =>
(Char -> Bool) -> Parser (BareSequence a)
fastaSeq Char -> Bool
predicate) Parser (FastaItem a) -> Parser Text () -> Parser (FastaItem a)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* (Char -> Bool) -> Parser Text ()
skipWhile Char -> Bool
isSpace
seqName :: Parser Text
seqName :: Parser Text Text
seqName = Text -> Text
strip (Text -> Text) -> Parser Text Text -> Parser Text Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Char -> Parser Char
char Char
'>' Parser Char -> Parser Text () -> Parser Text ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Text ()
tabs Parser Text () -> Parser Text Text -> Parser Text Text
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> (Char -> Bool) -> Parser Text Text
takeWhile (Char -> [Char] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`notElem` [Char
'\n', Char
'\r']) Parser Text Text -> Parser Text () -> Parser Text Text
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser Text ()
tabs Parser Text Text -> Parser Text () -> Parser Text Text
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser Text ()
eol)
fastaSeq :: ParsableFastaToken a => (Char -> Bool) -> Parser (BareSequence a)
fastaSeq :: (Char -> Bool) -> Parser (BareSequence a)
fastaSeq Char -> Bool
predicate = [a] -> BareSequence a
forall s. IsBareSequence s => [Element s] -> s
bareSequence ([a] -> BareSequence a)
-> ([[a]] -> [a]) -> [[a]] -> BareSequence a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [[a]] -> [a]
forall a. Monoid a => [a] -> a
mconcat ([[a]] -> BareSequence a)
-> Parser Text [[a]] -> Parser (BareSequence a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Text [a] -> Parser Text [[a]]
forall (m :: * -> *) a. MonadPlus m => m a -> m [a]
many' ((Char -> Bool) -> Parser Text [a]
forall a. ParsableFastaToken a => (Char -> Bool) -> Parser [a]
fastaLine Char -> Bool
predicate)
fastaLine :: ParsableFastaToken a => (Char -> Bool) -> Parser [a]
fastaLine :: (Char -> Bool) -> Parser [a]
fastaLine Char -> Bool
predicate = [[a]] -> [a]
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat ([[a]] -> [a]) -> Parser Text [[a]] -> Parser [a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser [a] -> Parser Text [[a]]
forall (m :: * -> *) a. MonadPlus m => m a -> m [a]
many1' (Parser Text a -> Parser [a]
forall (m :: * -> *) a. MonadPlus m => m a -> m [a]
many1' ((Char -> Bool) -> Parser Text a
forall a. ParsableFastaToken a => (Char -> Bool) -> Parser a
parseToken Char -> Bool
predicate) Parser [a] -> Parser Text [Char] -> Parser [a]
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser Char -> Parser Text [Char]
forall (m :: * -> *) a. MonadPlus m => m a -> m [a]
many' (Char -> Parser Char
char Char
' ')) Parser [a] -> Parser Text () -> Parser [a]
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser Text ()
eol
eol :: Parser ()
eol :: Parser Text ()
eol = Parser Text ()
tabs Parser Text () -> Parser Text () -> Parser Text ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> [Parser Text ()] -> Parser Text ()
forall (f :: * -> *) a. Alternative f => [f a] -> f a
choice [Parser Text ()
slashN, Parser Text ()
forall t. Chunk t => Parser t ()
endOfInput]
slashN :: Parser ()
slashN :: Parser Text ()
slashN = () () -> Parser Text [()] -> Parser Text ()
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Parser Text () -> Parser Text [()]
forall (m :: * -> *) a. MonadPlus m => m a -> m [a]
many1' Parser Text ()
endOfLine
tabs :: Parser ()
tabs :: Parser Text ()
tabs = () () -> Parser Text [Char] -> Parser Text ()
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Parser Char -> Parser Text [Char]
forall (m :: * -> *) a. MonadPlus m => m a -> m [a]
many' (Char -> Parser Char
char Char
'\t')
modificationP :: Parser Modification
modificationP :: Parser Text Modification
modificationP
= Text -> Parser Text Text
string Text
"[A*]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_A_Star
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[C*]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_C_Star
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[G*]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_G_Star
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[T*]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_T_Star
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[rA]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_rA
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[rC]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_rC
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[rG]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_rG
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[rU]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_rU
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[+A]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_Plus_A
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[+C]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_Plus_C
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[+G]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_Plus_G
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[+T]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_Plus_T
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[rAf]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_rAf
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[rCf]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_rCf
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[rGf]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_rGf
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[rUf]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_rUf
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[mA]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_mA
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[mC]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_mC
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[mG]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_mG
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[mU]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_mU
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[mA*]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_mA_Star
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[mC*]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_mC_Star
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[mG*]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_mG_Star
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[mU*]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_mU_Star
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[dU]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_dU
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[5Bio]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_5Bio
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[iBio]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_iBio
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[56FAM]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_56FAM
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[36FAM]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_36FAM
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[5HEX]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_5HEX
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[5TMR]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_5TMR
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[3BHQ1]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_3BHQ1
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[3BHQ2]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_3BHQ2
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[5NH2]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_5NH2
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[3NH2]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_3NH2
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[5PO4]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_5PO4
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[3PO4]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_3PO4
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[3BioTEG]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_3BioTEG
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[C12]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_C12
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[NHSdT]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_NHSdT
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[5Mal]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_5Mal
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[5thio]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_5thio
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[3thio]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_3thio
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[3azide]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_3azide
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[3alkine]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_3alkine
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[5CholTEG]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_5CholTEG
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[3CholTEG]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_3CholTEG
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[5C10]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_5C10
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[5Alk]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_5Alk
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[GC]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_GC
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[GT]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_GT
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[AT]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_AT
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[TG]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_TG
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[AC]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_AC
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[CC]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_CC
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[AA]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_AA
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[TC]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_TC
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[TT]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_TT
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[CG]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_CG
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[GG]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_GG
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[AG]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_AG
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[GA]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_GA
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[CA]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_CA
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[CT]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_CT
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[TA]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_TA
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[AAA]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_AAA
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[AAC]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_AAC
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[ACT]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_ACT
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[ATC]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_ATC
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[ATG]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_ATG
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[CAG]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_CAG
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[AGA]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_AGA
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[CAT]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_CAT
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[CCG]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_CCG
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[CGT]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_CGT
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[CTG]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_CTG
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[GAA]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_GAA
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[GAC]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_GAC
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[GCT]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_GCT
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[GGT]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_GGT
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[GTT]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_GTT
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[TAC]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_TAC
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[TCT]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_TCT
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[TGC]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_TGC
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[TGG]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_TGG
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[TTC]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_TTC
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> Parser Text Text
string Text
"[TTT]" Parser Text Text
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure Modification
Mod_TTT
Parser Text Modification
-> Parser Text Modification -> Parser Text Modification
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser Text Modification
unknownP
unknownP :: Parser Modification
unknownP :: Parser Text Modification
unknownP = Parser Text Modification -> Parser Text Modification
forall i a. Parser i a -> Parser i a
try (Parser Text Modification -> Parser Text Modification)
-> Parser Text Modification -> Parser Text Modification
forall a b. (a -> b) -> a -> b
$ do
Char
_ <- Char -> Parser Char
char Char
'['
[Char]
m <- Parser Char -> Parser Text [Char]
forall (m :: * -> *) a. MonadPlus m => m a -> m [a]
many1' (Parser Char -> Parser Text [Char])
-> Parser Char -> Parser Text [Char]
forall a b. (a -> b) -> a -> b
$ (Char -> Bool) -> Parser Char
satisfy (\Char
c -> Char -> Bool
isAlphaNum Char
c Bool -> Bool -> Bool
|| Char
c Char -> [Char] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` [Char
'+', Char
'-', Char
'*', Char
'_'])
Char
_ <- Char -> Parser Char
char Char
']'
Modification -> Parser Text Modification
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Modification -> Parser Text Modification)
-> Modification -> Parser Text Modification
forall a b. (a -> b) -> a -> b
$ [Char] -> Modification
Unknown ([Char]
"[" [Char] -> [Char] -> [Char]
forall a. Semigroup a => a -> a -> a
<> [Char]
m [Char] -> [Char] -> [Char]
forall a. Semigroup a => a -> a -> a
<> [Char]
"]")