module Biobase.Types.Structure where
import Control.Applicative
import Control.DeepSeq
import Control.Lens
import Control.Monad.Error.Class
import Control.Monad (foldM,unless)
import Data.Attoparsec.ByteString.Char8
import Data.Attoparsec.Combinator
import Data.Bifunctor (second)
import Data.ByteString (ByteString)
import Data.Data
import Data.List (foldl1',foldl')
import Data.Monoid ((<>))
import Data.Set (Set)
import GHC.Generics (Generic)
import qualified Data.ByteString.Char8 as BS8
import qualified Data.List as L
import qualified Data.Set as S
import qualified Data.Set as Set
import qualified Data.Vector.Unboxed as VU
import qualified Test.QuickCheck as Q
import Data.Forest.StructuredPaired
newtype RNAss = RNAss { RNAss -> ByteString
_rnass ∷ ByteString }
deriving (RNAss -> RNAss -> Bool
(RNAss -> RNAss -> Bool) -> (RNAss -> RNAss -> Bool) -> Eq RNAss
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: RNAss -> RNAss -> Bool
$c/= :: RNAss -> RNAss -> Bool
== :: RNAss -> RNAss -> Bool
$c== :: RNAss -> RNAss -> Bool
Eq,Eq RNAss
Eq RNAss
-> (RNAss -> RNAss -> Ordering)
-> (RNAss -> RNAss -> Bool)
-> (RNAss -> RNAss -> Bool)
-> (RNAss -> RNAss -> Bool)
-> (RNAss -> RNAss -> Bool)
-> (RNAss -> RNAss -> RNAss)
-> (RNAss -> RNAss -> RNAss)
-> Ord RNAss
RNAss -> RNAss -> Bool
RNAss -> RNAss -> Ordering
RNAss -> RNAss -> RNAss
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: RNAss -> RNAss -> RNAss
$cmin :: RNAss -> RNAss -> RNAss
max :: RNAss -> RNAss -> RNAss
$cmax :: RNAss -> RNAss -> RNAss
>= :: RNAss -> RNAss -> Bool
$c>= :: RNAss -> RNAss -> Bool
> :: RNAss -> RNAss -> Bool
$c> :: RNAss -> RNAss -> Bool
<= :: RNAss -> RNAss -> Bool
$c<= :: RNAss -> RNAss -> Bool
< :: RNAss -> RNAss -> Bool
$c< :: RNAss -> RNAss -> Bool
compare :: RNAss -> RNAss -> Ordering
$ccompare :: RNAss -> RNAss -> Ordering
$cp1Ord :: Eq RNAss
Ord,Int -> RNAss -> ShowS
[RNAss] -> ShowS
RNAss -> String
(Int -> RNAss -> ShowS)
-> (RNAss -> String) -> ([RNAss] -> ShowS) -> Show RNAss
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [RNAss] -> ShowS
$cshowList :: [RNAss] -> ShowS
show :: RNAss -> String
$cshow :: RNAss -> String
showsPrec :: Int -> RNAss -> ShowS
$cshowsPrec :: Int -> RNAss -> ShowS
Show,ReadPrec [RNAss]
ReadPrec RNAss
Int -> ReadS RNAss
ReadS [RNAss]
(Int -> ReadS RNAss)
-> ReadS [RNAss]
-> ReadPrec RNAss
-> ReadPrec [RNAss]
-> Read RNAss
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [RNAss]
$creadListPrec :: ReadPrec [RNAss]
readPrec :: ReadPrec RNAss
$creadPrec :: ReadPrec RNAss
readList :: ReadS [RNAss]
$creadList :: ReadS [RNAss]
readsPrec :: Int -> ReadS RNAss
$creadsPrec :: Int -> ReadS RNAss
Read,Typeable RNAss
DataType
Constr
Typeable RNAss
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> RNAss -> c RNAss)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c RNAss)
-> (RNAss -> Constr)
-> (RNAss -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c RNAss))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c RNAss))
-> ((forall b. Data b => b -> b) -> RNAss -> RNAss)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> RNAss -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> RNAss -> r)
-> (forall u. (forall d. Data d => d -> u) -> RNAss -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> RNAss -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> RNAss -> m RNAss)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> RNAss -> m RNAss)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> RNAss -> m RNAss)
-> Data RNAss
RNAss -> DataType
RNAss -> Constr
(forall b. Data b => b -> b) -> RNAss -> RNAss
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> RNAss -> c RNAss
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c RNAss
forall a.
Typeable a
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> RNAss -> u
forall u. (forall d. Data d => d -> u) -> RNAss -> [u]
forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> RNAss -> r
forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> RNAss -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> RNAss -> m RNAss
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> RNAss -> m RNAss
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c RNAss
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> RNAss -> c RNAss
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c RNAss)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c RNAss)
$cRNAss :: Constr
$tRNAss :: DataType
gmapMo :: (forall d. Data d => d -> m d) -> RNAss -> m RNAss
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> RNAss -> m RNAss
gmapMp :: (forall d. Data d => d -> m d) -> RNAss -> m RNAss
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> RNAss -> m RNAss
gmapM :: (forall d. Data d => d -> m d) -> RNAss -> m RNAss
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> RNAss -> m RNAss
gmapQi :: Int -> (forall d. Data d => d -> u) -> RNAss -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> RNAss -> u
gmapQ :: (forall d. Data d => d -> u) -> RNAss -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> RNAss -> [u]
gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> RNAss -> r
$cgmapQr :: forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> RNAss -> r
gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> RNAss -> r
$cgmapQl :: forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> RNAss -> r
gmapT :: (forall b. Data b => b -> b) -> RNAss -> RNAss
$cgmapT :: (forall b. Data b => b -> b) -> RNAss -> RNAss
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c RNAss)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c RNAss)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c RNAss)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c RNAss)
dataTypeOf :: RNAss -> DataType
$cdataTypeOf :: RNAss -> DataType
toConstr :: RNAss -> Constr
$ctoConstr :: RNAss -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c RNAss
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c RNAss
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> RNAss -> c RNAss
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> RNAss -> c RNAss
$cp1Data :: Typeable RNAss
Data,Typeable,(forall x. RNAss -> Rep RNAss x)
-> (forall x. Rep RNAss x -> RNAss) -> Generic RNAss
forall x. Rep RNAss x -> RNAss
forall x. RNAss -> Rep RNAss x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep RNAss x -> RNAss
$cfrom :: forall x. RNAss -> Rep RNAss x
Generic,b -> RNAss -> RNAss
NonEmpty RNAss -> RNAss
RNAss -> RNAss -> RNAss
(RNAss -> RNAss -> RNAss)
-> (NonEmpty RNAss -> RNAss)
-> (forall b. Integral b => b -> RNAss -> RNAss)
-> Semigroup RNAss
forall b. Integral b => b -> RNAss -> RNAss
forall a.
(a -> a -> a)
-> (NonEmpty a -> a)
-> (forall b. Integral b => b -> a -> a)
-> Semigroup a
stimes :: b -> RNAss -> RNAss
$cstimes :: forall b. Integral b => b -> RNAss -> RNAss
sconcat :: NonEmpty RNAss -> RNAss
$csconcat :: NonEmpty RNAss -> RNAss
<> :: RNAss -> RNAss -> RNAss
$c<> :: RNAss -> RNAss -> RNAss
Semigroup,Semigroup RNAss
RNAss
Semigroup RNAss
-> RNAss
-> (RNAss -> RNAss -> RNAss)
-> ([RNAss] -> RNAss)
-> Monoid RNAss
[RNAss] -> RNAss
RNAss -> RNAss -> RNAss
forall a.
Semigroup a -> a -> (a -> a -> a) -> ([a] -> a) -> Monoid a
mconcat :: [RNAss] -> RNAss
$cmconcat :: [RNAss] -> RNAss
mappend :: RNAss -> RNAss -> RNAss
$cmappend :: RNAss -> RNAss -> RNAss
mempty :: RNAss
$cmempty :: RNAss
$cp1Monoid :: Semigroup RNAss
Monoid)
makeLenses ''RNAss
instance NFData RNAss
newtype RNAensembleStructure = RNAes { RNAensembleStructure -> ByteString
_rnaes ∷ ByteString }
deriving (RNAensembleStructure -> RNAensembleStructure -> Bool
(RNAensembleStructure -> RNAensembleStructure -> Bool)
-> (RNAensembleStructure -> RNAensembleStructure -> Bool)
-> Eq RNAensembleStructure
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: RNAensembleStructure -> RNAensembleStructure -> Bool
$c/= :: RNAensembleStructure -> RNAensembleStructure -> Bool
== :: RNAensembleStructure -> RNAensembleStructure -> Bool
$c== :: RNAensembleStructure -> RNAensembleStructure -> Bool
Eq,Eq RNAensembleStructure
Eq RNAensembleStructure
-> (RNAensembleStructure -> RNAensembleStructure -> Ordering)
-> (RNAensembleStructure -> RNAensembleStructure -> Bool)
-> (RNAensembleStructure -> RNAensembleStructure -> Bool)
-> (RNAensembleStructure -> RNAensembleStructure -> Bool)
-> (RNAensembleStructure -> RNAensembleStructure -> Bool)
-> (RNAensembleStructure
-> RNAensembleStructure -> RNAensembleStructure)
-> (RNAensembleStructure
-> RNAensembleStructure -> RNAensembleStructure)
-> Ord RNAensembleStructure
RNAensembleStructure -> RNAensembleStructure -> Bool
RNAensembleStructure -> RNAensembleStructure -> Ordering
RNAensembleStructure
-> RNAensembleStructure -> RNAensembleStructure
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: RNAensembleStructure
-> RNAensembleStructure -> RNAensembleStructure
$cmin :: RNAensembleStructure
-> RNAensembleStructure -> RNAensembleStructure
max :: RNAensembleStructure
-> RNAensembleStructure -> RNAensembleStructure
$cmax :: RNAensembleStructure
-> RNAensembleStructure -> RNAensembleStructure
>= :: RNAensembleStructure -> RNAensembleStructure -> Bool
$c>= :: RNAensembleStructure -> RNAensembleStructure -> Bool
> :: RNAensembleStructure -> RNAensembleStructure -> Bool
$c> :: RNAensembleStructure -> RNAensembleStructure -> Bool
<= :: RNAensembleStructure -> RNAensembleStructure -> Bool
$c<= :: RNAensembleStructure -> RNAensembleStructure -> Bool
< :: RNAensembleStructure -> RNAensembleStructure -> Bool
$c< :: RNAensembleStructure -> RNAensembleStructure -> Bool
compare :: RNAensembleStructure -> RNAensembleStructure -> Ordering
$ccompare :: RNAensembleStructure -> RNAensembleStructure -> Ordering
$cp1Ord :: Eq RNAensembleStructure
Ord,Int -> RNAensembleStructure -> ShowS
[RNAensembleStructure] -> ShowS
RNAensembleStructure -> String
(Int -> RNAensembleStructure -> ShowS)
-> (RNAensembleStructure -> String)
-> ([RNAensembleStructure] -> ShowS)
-> Show RNAensembleStructure
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [RNAensembleStructure] -> ShowS
$cshowList :: [RNAensembleStructure] -> ShowS
show :: RNAensembleStructure -> String
$cshow :: RNAensembleStructure -> String
showsPrec :: Int -> RNAensembleStructure -> ShowS
$cshowsPrec :: Int -> RNAensembleStructure -> ShowS
Show,ReadPrec [RNAensembleStructure]
ReadPrec RNAensembleStructure
Int -> ReadS RNAensembleStructure
ReadS [RNAensembleStructure]
(Int -> ReadS RNAensembleStructure)
-> ReadS [RNAensembleStructure]
-> ReadPrec RNAensembleStructure
-> ReadPrec [RNAensembleStructure]
-> Read RNAensembleStructure
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [RNAensembleStructure]
$creadListPrec :: ReadPrec [RNAensembleStructure]
readPrec :: ReadPrec RNAensembleStructure
$creadPrec :: ReadPrec RNAensembleStructure
readList :: ReadS [RNAensembleStructure]
$creadList :: ReadS [RNAensembleStructure]
readsPrec :: Int -> ReadS RNAensembleStructure
$creadsPrec :: Int -> ReadS RNAensembleStructure
Read,Typeable RNAensembleStructure
DataType
Constr
Typeable RNAensembleStructure
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g)
-> RNAensembleStructure
-> c RNAensembleStructure)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c RNAensembleStructure)
-> (RNAensembleStructure -> Constr)
-> (RNAensembleStructure -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c RNAensembleStructure))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c RNAensembleStructure))
-> ((forall b. Data b => b -> b)
-> RNAensembleStructure -> RNAensembleStructure)
-> (forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> RNAensembleStructure -> r)
-> (forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> RNAensembleStructure -> r)
-> (forall u.
(forall d. Data d => d -> u) -> RNAensembleStructure -> [u])
-> (forall u.
Int -> (forall d. Data d => d -> u) -> RNAensembleStructure -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> RNAensembleStructure -> m RNAensembleStructure)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> RNAensembleStructure -> m RNAensembleStructure)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> RNAensembleStructure -> m RNAensembleStructure)
-> Data RNAensembleStructure
RNAensembleStructure -> DataType
RNAensembleStructure -> Constr
(forall b. Data b => b -> b)
-> RNAensembleStructure -> RNAensembleStructure
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g)
-> RNAensembleStructure
-> c RNAensembleStructure
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c RNAensembleStructure
forall a.
Typeable a
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u.
Int -> (forall d. Data d => d -> u) -> RNAensembleStructure -> u
forall u.
(forall d. Data d => d -> u) -> RNAensembleStructure -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> RNAensembleStructure -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> RNAensembleStructure -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> RNAensembleStructure -> m RNAensembleStructure
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> RNAensembleStructure -> m RNAensembleStructure
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c RNAensembleStructure
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g)
-> RNAensembleStructure
-> c RNAensembleStructure
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c RNAensembleStructure)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c RNAensembleStructure)
$cRNAes :: Constr
$tRNAensembleStructure :: DataType
gmapMo :: (forall d. Data d => d -> m d)
-> RNAensembleStructure -> m RNAensembleStructure
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> RNAensembleStructure -> m RNAensembleStructure
gmapMp :: (forall d. Data d => d -> m d)
-> RNAensembleStructure -> m RNAensembleStructure
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> RNAensembleStructure -> m RNAensembleStructure
gmapM :: (forall d. Data d => d -> m d)
-> RNAensembleStructure -> m RNAensembleStructure
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> RNAensembleStructure -> m RNAensembleStructure
gmapQi :: Int -> (forall d. Data d => d -> u) -> RNAensembleStructure -> u
$cgmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> RNAensembleStructure -> u
gmapQ :: (forall d. Data d => d -> u) -> RNAensembleStructure -> [u]
$cgmapQ :: forall u.
(forall d. Data d => d -> u) -> RNAensembleStructure -> [u]
gmapQr :: (r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> RNAensembleStructure -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> RNAensembleStructure -> r
gmapQl :: (r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> RNAensembleStructure -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> RNAensembleStructure -> r
gmapT :: (forall b. Data b => b -> b)
-> RNAensembleStructure -> RNAensembleStructure
$cgmapT :: (forall b. Data b => b -> b)
-> RNAensembleStructure -> RNAensembleStructure
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c RNAensembleStructure)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c RNAensembleStructure)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c RNAensembleStructure)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c RNAensembleStructure)
dataTypeOf :: RNAensembleStructure -> DataType
$cdataTypeOf :: RNAensembleStructure -> DataType
toConstr :: RNAensembleStructure -> Constr
$ctoConstr :: RNAensembleStructure -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c RNAensembleStructure
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c RNAensembleStructure
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g)
-> RNAensembleStructure
-> c RNAensembleStructure
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g)
-> RNAensembleStructure
-> c RNAensembleStructure
$cp1Data :: Typeable RNAensembleStructure
Data,Typeable,(forall x. RNAensembleStructure -> Rep RNAensembleStructure x)
-> (forall x. Rep RNAensembleStructure x -> RNAensembleStructure)
-> Generic RNAensembleStructure
forall x. Rep RNAensembleStructure x -> RNAensembleStructure
forall x. RNAensembleStructure -> Rep RNAensembleStructure x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep RNAensembleStructure x -> RNAensembleStructure
$cfrom :: forall x. RNAensembleStructure -> Rep RNAensembleStructure x
Generic)
makeLenses ''RNAensembleStructure
instance NFData RNAensembleStructure
data RNAds = RNAds
{ RNAds -> ByteString
_rnadsL ∷ !ByteString
, RNAds -> ByteString
_rnadsR ∷ !ByteString
}
deriving (RNAds -> RNAds -> Bool
(RNAds -> RNAds -> Bool) -> (RNAds -> RNAds -> Bool) -> Eq RNAds
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: RNAds -> RNAds -> Bool
$c/= :: RNAds -> RNAds -> Bool
== :: RNAds -> RNAds -> Bool
$c== :: RNAds -> RNAds -> Bool
Eq,Eq RNAds
Eq RNAds
-> (RNAds -> RNAds -> Ordering)
-> (RNAds -> RNAds -> Bool)
-> (RNAds -> RNAds -> Bool)
-> (RNAds -> RNAds -> Bool)
-> (RNAds -> RNAds -> Bool)
-> (RNAds -> RNAds -> RNAds)
-> (RNAds -> RNAds -> RNAds)
-> Ord RNAds
RNAds -> RNAds -> Bool
RNAds -> RNAds -> Ordering
RNAds -> RNAds -> RNAds
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: RNAds -> RNAds -> RNAds
$cmin :: RNAds -> RNAds -> RNAds
max :: RNAds -> RNAds -> RNAds
$cmax :: RNAds -> RNAds -> RNAds
>= :: RNAds -> RNAds -> Bool
$c>= :: RNAds -> RNAds -> Bool
> :: RNAds -> RNAds -> Bool
$c> :: RNAds -> RNAds -> Bool
<= :: RNAds -> RNAds -> Bool
$c<= :: RNAds -> RNAds -> Bool
< :: RNAds -> RNAds -> Bool
$c< :: RNAds -> RNAds -> Bool
compare :: RNAds -> RNAds -> Ordering
$ccompare :: RNAds -> RNAds -> Ordering
$cp1Ord :: Eq RNAds
Ord,Int -> RNAds -> ShowS
[RNAds] -> ShowS
RNAds -> String
(Int -> RNAds -> ShowS)
-> (RNAds -> String) -> ([RNAds] -> ShowS) -> Show RNAds
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [RNAds] -> ShowS
$cshowList :: [RNAds] -> ShowS
show :: RNAds -> String
$cshow :: RNAds -> String
showsPrec :: Int -> RNAds -> ShowS
$cshowsPrec :: Int -> RNAds -> ShowS
Show,ReadPrec [RNAds]
ReadPrec RNAds
Int -> ReadS RNAds
ReadS [RNAds]
(Int -> ReadS RNAds)
-> ReadS [RNAds]
-> ReadPrec RNAds
-> ReadPrec [RNAds]
-> Read RNAds
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [RNAds]
$creadListPrec :: ReadPrec [RNAds]
readPrec :: ReadPrec RNAds
$creadPrec :: ReadPrec RNAds
readList :: ReadS [RNAds]
$creadList :: ReadS [RNAds]
readsPrec :: Int -> ReadS RNAds
$creadsPrec :: Int -> ReadS RNAds
Read,Typeable RNAds
DataType
Constr
Typeable RNAds
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> RNAds -> c RNAds)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c RNAds)
-> (RNAds -> Constr)
-> (RNAds -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c RNAds))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c RNAds))
-> ((forall b. Data b => b -> b) -> RNAds -> RNAds)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> RNAds -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> RNAds -> r)
-> (forall u. (forall d. Data d => d -> u) -> RNAds -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> RNAds -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> RNAds -> m RNAds)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> RNAds -> m RNAds)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> RNAds -> m RNAds)
-> Data RNAds
RNAds -> DataType
RNAds -> Constr
(forall b. Data b => b -> b) -> RNAds -> RNAds
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> RNAds -> c RNAds
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c RNAds
forall a.
Typeable a
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> RNAds -> u
forall u. (forall d. Data d => d -> u) -> RNAds -> [u]
forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> RNAds -> r
forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> RNAds -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> RNAds -> m RNAds
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> RNAds -> m RNAds
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c RNAds
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> RNAds -> c RNAds
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c RNAds)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c RNAds)
$cRNAds :: Constr
$tRNAds :: DataType
gmapMo :: (forall d. Data d => d -> m d) -> RNAds -> m RNAds
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> RNAds -> m RNAds
gmapMp :: (forall d. Data d => d -> m d) -> RNAds -> m RNAds
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> RNAds -> m RNAds
gmapM :: (forall d. Data d => d -> m d) -> RNAds -> m RNAds
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> RNAds -> m RNAds
gmapQi :: Int -> (forall d. Data d => d -> u) -> RNAds -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> RNAds -> u
gmapQ :: (forall d. Data d => d -> u) -> RNAds -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> RNAds -> [u]
gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> RNAds -> r
$cgmapQr :: forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> RNAds -> r
gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> RNAds -> r
$cgmapQl :: forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> RNAds -> r
gmapT :: (forall b. Data b => b -> b) -> RNAds -> RNAds
$cgmapT :: (forall b. Data b => b -> b) -> RNAds -> RNAds
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c RNAds)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c RNAds)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c RNAds)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c RNAds)
dataTypeOf :: RNAds -> DataType
$cdataTypeOf :: RNAds -> DataType
toConstr :: RNAds -> Constr
$ctoConstr :: RNAds -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c RNAds
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c RNAds
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> RNAds -> c RNAds
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> RNAds -> c RNAds
$cp1Data :: Typeable RNAds
Data,Typeable,(forall x. RNAds -> Rep RNAds x)
-> (forall x. Rep RNAds x -> RNAds) -> Generic RNAds
forall x. Rep RNAds x -> RNAds
forall x. RNAds -> Rep RNAds x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep RNAds x -> RNAds
$cfrom :: forall x. RNAds -> Rep RNAds x
Generic)
makeLenses ''RNAds
instance NFData RNAds
rnads ∷ Prism' ByteString RNAds
rnads :: p RNAds (f RNAds) -> p ByteString (f ByteString)
rnads = (RNAds -> ByteString)
-> (ByteString -> Either ByteString RNAds)
-> Prism ByteString ByteString RNAds RNAds
forall b t s a. (b -> t) -> (s -> Either t a) -> Prism s t a b
prism (\(RNAds ByteString
l ByteString
r) → [ByteString] -> ByteString
BS8.concat [ByteString
l, ByteString
"&", ByteString
r])
(\ByteString
s → case Char -> ByteString -> [ByteString]
BS8.split Char
'&' ByteString
s of [ByteString
l,ByteString
r] → RNAds -> Either ByteString RNAds
forall a b. b -> Either a b
Right (ByteString -> ByteString -> RNAds
RNAds ByteString
l ByteString
r) ; [ByteString]
_ → ByteString -> Either ByteString RNAds
forall a b. a -> Either a b
Left ByteString
s)
{-# Inline rnads #-}
rnads2rnassPair ∷ Iso' RNAds (RNAss, RNAss)
rnads2rnassPair :: p (RNAss, RNAss) (f (RNAss, RNAss)) -> p RNAds (f RNAds)
rnads2rnassPair = (RNAds -> (RNAss, RNAss))
-> ((RNAss, RNAss) -> RNAds)
-> Iso RNAds RNAds (RNAss, RNAss) (RNAss, RNAss)
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso (\(RNAds ByteString
l ByteString
r) → (ByteString -> RNAss
RNAss ByteString
l, ByteString -> RNAss
RNAss ByteString
r)) (\(RNAss ByteString
l, RNAss ByteString
r) → ByteString -> ByteString -> RNAds
RNAds ByteString
l ByteString
r)
{-# Inline rnads2rnassPair #-}
mkRNAds ∷ (Monad m, MonadError RNAStructureError m) ⇒ ByteString → m RNAds
mkRNAds :: ByteString -> m RNAds
mkRNAds ByteString
q = Char -> ByteString -> [ByteString]
BS8.split Char
'&' ByteString
q [ByteString] -> ([ByteString] -> m RNAds) -> m RNAds
forall a b. a -> (a -> b) -> b
& \case
[ByteString
l,ByteString
r] → do
RNAds -> m RNAds
forall (m :: * -> *) a. Monad m => a -> m a
return (RNAds -> m RNAds) -> RNAds -> m RNAds
forall a b. (a -> b) -> a -> b
$ RNAds :: ByteString -> ByteString -> RNAds
RNAds
{ _rnadsL :: ByteString
_rnadsL = ByteString
l
, _rnadsR :: ByteString
_rnadsR = ByteString
r
}
[ByteString]
_ → RNAStructureError -> m RNAds
forall e (m :: * -> *) a. MonadError e m => e -> m a
throwError (RNAStructureError -> m RNAds) -> RNAStructureError -> m RNAds
forall a b. (a -> b) -> a -> b
$ String -> ByteString -> RNAStructureError
RNAStructureError String
"mkRNAds: not a dimer" ByteString
q
{-# Inline mkRNAds #-}
data RNAStructureError = RNAStructureError
{ RNAStructureError -> String
_rnaStructureError ∷ String
, RNAStructureError -> ByteString
_rnaOffender ∷ ByteString
}
deriving (Int -> RNAStructureError -> ShowS
[RNAStructureError] -> ShowS
RNAStructureError -> String
(Int -> RNAStructureError -> ShowS)
-> (RNAStructureError -> String)
-> ([RNAStructureError] -> ShowS)
-> Show RNAStructureError
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [RNAStructureError] -> ShowS
$cshowList :: [RNAStructureError] -> ShowS
show :: RNAStructureError -> String
$cshow :: RNAStructureError -> String
showsPrec :: Int -> RNAStructureError -> ShowS
$cshowsPrec :: Int -> RNAStructureError -> ShowS
Show,(forall x. RNAStructureError -> Rep RNAStructureError x)
-> (forall x. Rep RNAStructureError x -> RNAStructureError)
-> Generic RNAStructureError
forall x. Rep RNAStructureError x -> RNAStructureError
forall x. RNAStructureError -> Rep RNAStructureError x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep RNAStructureError x -> RNAStructureError
$cfrom :: forall x. RNAStructureError -> Rep RNAStructureError x
Generic)
instance NFData RNAStructureError
verifyRNAss ∷ (Monad m, MonadError RNAStructureError m) ⇒ RNAss → m RNAss
verifyRNAss :: RNAss -> m RNAss
verifyRNAss RNAss
ss = do
RNAss -> m RNAss
forall (m :: * -> *) a. Monad m => a -> m a
return RNAss
ss
data RNApset = RNApset
{ RNApset -> Set (Int, Int)
_rnapset ∷ !(Set (Int,Int))
, RNApset -> Int
_rnapsetSLen ∷ !Int
}
deriving (ReadPrec [RNApset]
ReadPrec RNApset
Int -> ReadS RNApset
ReadS [RNApset]
(Int -> ReadS RNApset)
-> ReadS [RNApset]
-> ReadPrec RNApset
-> ReadPrec [RNApset]
-> Read RNApset
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [RNApset]
$creadListPrec :: ReadPrec [RNApset]
readPrec :: ReadPrec RNApset
$creadPrec :: ReadPrec RNApset
readList :: ReadS [RNApset]
$creadList :: ReadS [RNApset]
readsPrec :: Int -> ReadS RNApset
$creadsPrec :: Int -> ReadS RNApset
Read,Int -> RNApset -> ShowS
[RNApset] -> ShowS
RNApset -> String
(Int -> RNApset -> ShowS)
-> (RNApset -> String) -> ([RNApset] -> ShowS) -> Show RNApset
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [RNApset] -> ShowS
$cshowList :: [RNApset] -> ShowS
show :: RNApset -> String
$cshow :: RNApset -> String
showsPrec :: Int -> RNApset -> ShowS
$cshowsPrec :: Int -> RNApset -> ShowS
Show,RNApset -> RNApset -> Bool
(RNApset -> RNApset -> Bool)
-> (RNApset -> RNApset -> Bool) -> Eq RNApset
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: RNApset -> RNApset -> Bool
$c/= :: RNApset -> RNApset -> Bool
== :: RNApset -> RNApset -> Bool
$c== :: RNApset -> RNApset -> Bool
Eq,Eq RNApset
Eq RNApset
-> (RNApset -> RNApset -> Ordering)
-> (RNApset -> RNApset -> Bool)
-> (RNApset -> RNApset -> Bool)
-> (RNApset -> RNApset -> Bool)
-> (RNApset -> RNApset -> Bool)
-> (RNApset -> RNApset -> RNApset)
-> (RNApset -> RNApset -> RNApset)
-> Ord RNApset
RNApset -> RNApset -> Bool
RNApset -> RNApset -> Ordering
RNApset -> RNApset -> RNApset
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: RNApset -> RNApset -> RNApset
$cmin :: RNApset -> RNApset -> RNApset
max :: RNApset -> RNApset -> RNApset
$cmax :: RNApset -> RNApset -> RNApset
>= :: RNApset -> RNApset -> Bool
$c>= :: RNApset -> RNApset -> Bool
> :: RNApset -> RNApset -> Bool
$c> :: RNApset -> RNApset -> Bool
<= :: RNApset -> RNApset -> Bool
$c<= :: RNApset -> RNApset -> Bool
< :: RNApset -> RNApset -> Bool
$c< :: RNApset -> RNApset -> Bool
compare :: RNApset -> RNApset -> Ordering
$ccompare :: RNApset -> RNApset -> Ordering
$cp1Ord :: Eq RNApset
Ord,(forall x. RNApset -> Rep RNApset x)
-> (forall x. Rep RNApset x -> RNApset) -> Generic RNApset
forall x. Rep RNApset x -> RNApset
forall x. RNApset -> Rep RNApset x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep RNApset x -> RNApset
$cfrom :: forall x. RNApset -> Rep RNApset x
Generic)
makeLenses ''RNApset
instance NFData RNApset
rnassPairSet
∷ (MonadError String m)
⇒ RNAss
→ m RNApset
rnassPairSet :: RNAss -> m RNApset
rnassPairSet (RNAss ByteString
s2) = do
let go :: (Set (Int, Int), [Int]) -> (Int, Char) -> m (Set (Int, Int), [Int])
go (Set (Int, Int)
set,[Int]
ks ) (Int
i,Char
'(') = (Set (Int, Int), [Int]) -> m (Set (Int, Int), [Int])
forall (m :: * -> *) a. Monad m => a -> m a
return (Set (Int, Int)
set,Int
iInt -> [Int] -> [Int]
forall a. a -> [a] -> [a]
:[Int]
ks)
go (Set (Int, Int)
set,Int
i:[Int]
is) (Int
j,Char
')') = (Set (Int, Int), [Int]) -> m (Set (Int, Int), [Int])
forall (m :: * -> *) a. Monad m => a -> m a
return ((Int, Int) -> Set (Int, Int) -> Set (Int, Int)
forall a. Ord a => a -> Set a -> Set a
Set.insert (Int
i,Int
j) Set (Int, Int)
set, [Int]
is)
go (Set (Int, Int)
set,[] ) (Int
j,Char
')') = String -> m (Set (Int, Int), [Int])
forall e (m :: * -> *) a. MonadError e m => e -> m a
throwError (String -> m (Set (Int, Int), [Int]))
-> String -> m (Set (Int, Int), [Int])
forall a b. (a -> b) -> a -> b
$ String
"unequal brackets in \"" String -> ShowS
forall a. [a] -> [a] -> [a]
++ ByteString -> String
BS8.unpack ByteString
s2 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"\" at position: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
j
go (Set (Int, Int)
set,[Int]
ks ) (Int
_,Char
'.') = (Set (Int, Int), [Int]) -> m (Set (Int, Int), [Int])
forall (m :: * -> *) a. Monad m => a -> m a
return (Set (Int, Int)
set,[Int]
ks)
(Set (Int, Int)
set,[Int]
ss) ← ((Set (Int, Int), [Int])
-> (Int, Char) -> m (Set (Int, Int), [Int]))
-> (Set (Int, Int), [Int])
-> [(Int, Char)]
-> m (Set (Int, Int), [Int])
forall (t :: * -> *) (m :: * -> *) b a.
(Foldable t, Monad m) =>
(b -> a -> m b) -> b -> t a -> m b
foldM (Set (Int, Int), [Int]) -> (Int, Char) -> m (Set (Int, Int), [Int])
go (Set (Int, Int)
forall a. Set a
Set.empty,[]) ([(Int, Char)] -> m (Set (Int, Int), [Int]))
-> (String -> [(Int, Char)]) -> String -> m (Set (Int, Int), [Int])
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Int] -> String -> [(Int, Char)]
forall a b. [a] -> [b] -> [(a, b)]
L.zip [Int
0..] (String -> m (Set (Int, Int), [Int]))
-> String -> m (Set (Int, Int), [Int])
forall a b. (a -> b) -> a -> b
$ ByteString -> String
BS8.unpack ByteString
s2
Bool -> m () -> m ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless ([Int] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [Int]
ss) (m () -> m ()) -> m () -> m ()
forall a b. (a -> b) -> a -> b
$ String -> m ()
forall e (m :: * -> *) a. MonadError e m => e -> m a
throwError (String -> m ()) -> String -> m ()
forall a b. (a -> b) -> a -> b
$ String
"unequal brackets in \"" String -> ShowS
forall a. [a] -> [a] -> [a]
++ ByteString -> String
BS8.unpack ByteString
s2 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"\" with opening bracket(s): " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [Int] -> String
forall a. Show a => a -> String
show [Int]
ss
RNApset -> m RNApset
forall (m :: * -> *) a. Monad m => a -> m a
return (RNApset -> m RNApset) -> RNApset -> m RNApset
forall a b. (a -> b) -> a -> b
$ Set (Int, Int) -> Int -> RNApset
RNApset Set (Int, Int)
set (ByteString -> Int
BS8.length ByteString
s2)
{-# Inlinable rnassPairSet #-}
rnassSPForest
∷ (MonadError String m)
⇒ RNAss
→ m (SPForest ByteString Char)
rnassSPForest :: RNAss -> m (SPForest ByteString Char)
rnassSPForest (RNAss ByteString
s2) = (String -> m (SPForest ByteString Char))
-> (SPForest ByteString Char -> m (SPForest ByteString Char))
-> Either String (SPForest ByteString Char)
-> m (SPForest ByteString Char)
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either String -> m (SPForest ByteString Char)
forall e (m :: * -> *) a. MonadError e m => e -> m a
throwError SPForest ByteString Char -> m (SPForest ByteString Char)
forall (m :: * -> *) a. Monad m => a -> m a
return (Either String (SPForest ByteString Char)
-> m (SPForest ByteString Char))
-> Either String (SPForest ByteString Char)
-> m (SPForest ByteString Char)
forall a b. (a -> b) -> a -> b
$ Parser (SPForest ByteString Char)
-> ByteString -> Either String (SPForest ByteString Char)
forall a. Parser a -> ByteString -> Either String a
parseOnly (Parser (SPForest ByteString Char)
manyElems Parser (SPForest ByteString Char)
-> Parser ByteString () -> Parser (SPForest ByteString Char)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ByteString ()
forall t. Chunk t => Parser t ()
endOfInput) ByteString
s2
where
tree :: Parser (SPForest ByteString Char)
tree = Char
-> SPForest ByteString Char -> Char -> SPForest ByteString Char
forall r t. t -> SPForest r t -> t -> SPForest r t
SPT (Char
-> SPForest ByteString Char -> Char -> SPForest ByteString Char)
-> Parser ByteString Char
-> Parser
ByteString
(SPForest ByteString Char -> Char -> SPForest ByteString Char)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Char -> Parser ByteString Char
char Char
'(' Parser
ByteString
(SPForest ByteString Char -> Char -> SPForest ByteString Char)
-> Parser (SPForest ByteString Char)
-> Parser ByteString (Char -> SPForest ByteString Char)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (SPForest ByteString Char)
someElems Parser ByteString (Char -> SPForest ByteString Char)
-> Parser ByteString Char -> Parser (SPForest ByteString Char)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Char -> Parser ByteString Char
char Char
')' Parser (SPForest ByteString Char)
-> String -> Parser (SPForest ByteString Char)
forall i a. Parser i a -> String -> Parser i a
<?> String
"SPT"
unpaired :: Parser ByteString (SPForest ByteString t)
unpaired = ByteString -> SPForest ByteString t
forall r t. r -> SPForest r t
SPR (ByteString -> SPForest ByteString t)
-> Parser ByteString ByteString
-> Parser ByteString (SPForest ByteString t)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Char -> Bool) -> Parser ByteString ByteString
takeWhile1 (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
==Char
'.') Parser ByteString (SPForest ByteString t)
-> String -> Parser ByteString (SPForest ByteString t)
forall i a. Parser i a -> String -> Parser i a
<?> String
"SPR"
someElems :: Parser (SPForest ByteString Char)
someElems = [SPForest ByteString Char] -> SPForest ByteString Char
forall r t. [SPForest r t] -> SPForest r t
SPJ ([SPForest ByteString Char] -> SPForest ByteString Char)
-> Parser ByteString [SPForest ByteString Char]
-> Parser (SPForest ByteString Char)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser (SPForest ByteString Char)
-> Parser ByteString [SPForest ByteString Char]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many1 (Parser (SPForest ByteString Char)
tree Parser (SPForest ByteString Char)
-> Parser (SPForest ByteString Char)
-> Parser (SPForest ByteString Char)
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser (SPForest ByteString Char)
forall t. Parser ByteString (SPForest ByteString t)
unpaired) Parser (SPForest ByteString Char)
-> String -> Parser (SPForest ByteString Char)
forall i a. Parser i a -> String -> Parser i a
<?> String
"many1 SPT / SPR"
manyElems :: Parser (SPForest ByteString Char)
manyElems = (\case {[] → SPForest ByteString Char
forall r t. SPForest r t
SPE; [SPForest ByteString Char]
xs → [SPForest ByteString Char] -> SPForest ByteString Char
forall r t. [SPForest r t] -> SPForest r t
SPJ [SPForest ByteString Char]
xs}) ([SPForest ByteString Char] -> SPForest ByteString Char)
-> Parser ByteString [SPForest ByteString Char]
-> Parser (SPForest ByteString Char)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser (SPForest ByteString Char)
-> Parser ByteString [SPForest ByteString Char]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many (Parser (SPForest ByteString Char)
tree Parser (SPForest ByteString Char)
-> Parser (SPForest ByteString Char)
-> Parser (SPForest ByteString Char)
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser (SPForest ByteString Char)
forall t. Parser ByteString (SPForest ByteString t)
unpaired) Parser (SPForest ByteString Char)
-> String -> Parser (SPForest ByteString Char)
forall i a. Parser i a -> String -> Parser i a
<?> String
"many0 SPT / SPR"
{-# Inlinable rnassSPForest #-}
compactifySPForest
∷ SPForest ByteString Char
→ SPForest ByteString ByteString
compactifySPForest :: SPForest ByteString Char -> SPForest ByteString ByteString
compactifySPForest = SPForest ByteString ByteString -> SPForest ByteString ByteString
forall t r. Semigroup t => SPForest r t -> SPForest r t
go (SPForest ByteString ByteString -> SPForest ByteString ByteString)
-> (SPForest ByteString Char -> SPForest ByteString ByteString)
-> SPForest ByteString Char
-> SPForest ByteString ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Char -> ByteString)
-> SPForest ByteString Char -> SPForest ByteString ByteString
forall (p :: * -> * -> *) b c a.
Bifunctor p =>
(b -> c) -> p a b -> p a c
second Char -> ByteString
BS8.singleton
where go :: SPForest r t -> SPForest r t
go SPForest r t
SPE = SPForest r t
forall r t. SPForest r t
SPE
go (SPR r
x) = r -> SPForest r t
forall r t. r -> SPForest r t
SPR r
x
go (SPJ [SPForest r t]
xs) = [SPForest r t] -> SPForest r t
forall r t. [SPForest r t] -> SPForest r t
SPJ ((SPForest r t -> SPForest r t) -> [SPForest r t] -> [SPForest r t]
forall a b. (a -> b) -> [a] -> [b]
map SPForest r t -> SPForest r t
go [SPForest r t]
xs)
go (SPT t
l (SPJ [SPForest r t
x]) t
r) = SPForest r t -> SPForest r t
go (SPForest r t -> SPForest r t) -> SPForest r t -> SPForest r t
forall a b. (a -> b) -> a -> b
$ t -> SPForest r t -> t -> SPForest r t
forall r t. t -> SPForest r t -> t -> SPForest r t
SPT t
l SPForest r t
x t
r
go (SPT t
l (SPT t
l' SPForest r t
t t
r') t
r) = SPForest r t -> SPForest r t
go (SPForest r t -> SPForest r t) -> SPForest r t -> SPForest r t
forall a b. (a -> b) -> a -> b
$ t -> SPForest r t -> t -> SPForest r t
forall r t. t -> SPForest r t -> t -> SPForest r t
SPT (t
l t -> t -> t
forall a. Semigroup a => a -> a -> a
<> t
l') SPForest r t
t (t
r' t -> t -> t
forall a. Semigroup a => a -> a -> a
<> t
r)
go (SPT t
l SPForest r t
t t
r) = t -> SPForest r t -> t -> SPForest r t
forall r t. t -> SPForest r t -> t -> SPForest r t
SPT t
l (SPForest r t -> SPForest r t
go SPForest r t
t) t
r
rnassPairSet' ∷ RNAss → RNApset
rnassPairSet' :: RNAss -> RNApset
rnassPairSet' = (String -> RNApset)
-> (RNApset -> RNApset) -> Either String RNApset -> RNApset
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either String -> RNApset
forall a. HasCallStack => String -> a
error RNApset -> RNApset
forall a. a -> a
id (Either String RNApset -> RNApset)
-> (RNAss -> Either String RNApset) -> RNAss -> RNApset
forall b c a. (b -> c) -> (a -> b) -> a -> c
. RNAss -> Either String RNApset
forall (m :: * -> *). MonadError String m => RNAss -> m RNApset
rnassPairSet
rnapsetRNAss ∷ RNApset → RNAss
rnapsetRNAss :: RNApset -> RNAss
rnapsetRNAss (RNApset Set (Int, Int)
ps Int
l) = ByteString -> RNAss
RNAss (ByteString -> RNAss) -> ByteString -> RNAss
forall a b. (a -> b) -> a -> b
$ String -> ByteString
BS8.pack (String -> ByteString) -> String -> ByteString
forall a b. (a -> b) -> a -> b
$ Vector Char -> String
forall a. Unbox a => Vector a -> [a]
VU.toList Vector Char
xs
where xs :: Vector Char
xs = Int -> Char -> Vector Char
forall a. Unbox a => Int -> a -> Vector a
VU.replicate Int
l Char
'.' Vector Char -> [(Int, Char)] -> Vector Char
forall a. Unbox a => Vector a -> [(Int, a)] -> Vector a
VU.// [(Int, Char)]
ls Vector Char -> [(Int, Char)] -> Vector Char
forall a. Unbox a => Vector a -> [(Int, a)] -> Vector a
VU.// [(Int, Char)]
rs
ls :: [(Int, Char)]
ls = ((Int, Int) -> (Int, Char)) -> [(Int, Int)] -> [(Int, Char)]
forall a b. (a -> b) -> [a] -> [b]
L.map ((,Char
'(') (Int -> (Int, Char))
-> ((Int, Int) -> Int) -> (Int, Int) -> (Int, Char)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Int, Int) -> Int
forall a b. (a, b) -> a
fst) ([(Int, Int)] -> [(Int, Char)]) -> [(Int, Int)] -> [(Int, Char)]
forall a b. (a -> b) -> a -> b
$ Set (Int, Int) -> [(Int, Int)]
forall a. Set a -> [a]
S.toList Set (Int, Int)
ps
rs :: [(Int, Char)]
rs = ((Int, Int) -> (Int, Char)) -> [(Int, Int)] -> [(Int, Char)]
forall a b. (a -> b) -> [a] -> [b]
L.map ((,Char
')') (Int -> (Int, Char))
-> ((Int, Int) -> Int) -> (Int, Int) -> (Int, Char)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Int, Int) -> Int
forall a b. (a, b) -> b
snd) ([(Int, Int)] -> [(Int, Char)]) -> [(Int, Int)] -> [(Int, Char)]
forall a b. (a -> b) -> a -> b
$ Set (Int, Int) -> [(Int, Int)]
forall a. Set a -> [a]
S.toList Set (Int, Int)
ps
pairDist ∷ RNApset → RNApset → Int
pairDist :: RNApset -> RNApset -> Int
pairDist (RNApset Set (Int, Int)
p1 Int
_) (RNApset Set (Int, Int)
p2 Int
_) = Set (Int, Int) -> Int
forall a. Set a -> Int
Set.size Set (Int, Int)
z1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Set (Int, Int) -> Int
forall a. Set a -> Int
Set.size Set (Int, Int)
z2
where i :: Set (Int, Int)
i = Set (Int, Int) -> Set (Int, Int) -> Set (Int, Int)
forall a. Ord a => Set a -> Set a -> Set a
Set.intersection Set (Int, Int)
p1 Set (Int, Int)
p2
z1 :: Set (Int, Int)
z1 = Set (Int, Int)
p1 Set (Int, Int) -> Set (Int, Int) -> Set (Int, Int)
forall a. Ord a => Set a -> Set a -> Set a
`Set.difference` Set (Int, Int)
i
z2 :: Set (Int, Int)
z2 = Set (Int, Int)
p2 Set (Int, Int) -> Set (Int, Int) -> Set (Int, Int)
forall a. Ord a => Set a -> Set a -> Set a
`Set.difference` Set (Int, Int)
i
instance Q.Arbitrary RNApset where
arbitrary :: Gen RNApset
arbitrary = do
let go ∷ Int → Int → Q.Gen (Set (Int,Int))
go :: Int -> Int -> Gen (Set (Int, Int))
go Int
l Int
r
| Int
l Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>= Int
r = Set (Int, Int) -> Gen (Set (Int, Int))
forall (m :: * -> *) a. Monad m => a -> m a
return Set (Int, Int)
forall a. Set a
S.empty
| Bool
otherwise = do
Int
c ∷ Int ← [Gen Int] -> Gen Int
forall a. [Gen a] -> Gen a
Q.oneof [ (Int, Int) -> Gen Int
forall a. Random a => (a, a) -> Gen a
Q.choose (Int
lInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1,Int
r)
, (Int, Int) -> Gen Int
forall a. Random a => (a, a) -> Gen a
Q.choose (Int
lInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1, Int -> Int -> Int
forall a. Ord a => a -> a -> a
min Int
r (Int -> Int) -> Int -> Int
forall a b. (a -> b) -> a -> b
$ Int
lInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
20)
]
Int
z ∷ Int ← (Int, Int) -> Gen Int
forall a. Random a => (a, a) -> Gen a
Q.choose (Int
0,Int
5)
let stack :: Set (Int, Int)
stack = [(Int, Int)] -> Set (Int, Int)
forall a. Ord a => [a] -> Set a
S.fromList [(Int
lInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
k,Int
cInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
k) | Int
k ← [Int
0..Int
zInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1], Int
lInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
kInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
cInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
k]
Set (Int, Int)
right ← Int -> Int -> Gen (Set (Int, Int))
go (Int
cInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1) Int
r
Set (Int, Int) -> Gen (Set (Int, Int))
forall (m :: * -> *) a. Monad m => a -> m a
return (Set (Int, Int) -> Gen (Set (Int, Int)))
-> Set (Int, Int) -> Gen (Set (Int, Int))
forall a b. (a -> b) -> a -> b
$ Set (Int, Int) -> Set (Int, Int) -> Set (Int, Int)
forall a. Ord a => Set a -> Set a -> Set a
S.union Set (Int, Int)
stack Set (Int, Int)
right
Int
l ∷ Int ← (Int, Int) -> Gen Int
forall a. Random a => (a, a) -> Gen a
Q.choose (Int
0,Int
199)
Set (Int, Int)
s ← Int -> Int -> Gen (Set (Int, Int))
go Int
0 Int
l
RNApset -> Gen RNApset
forall (m :: * -> *) a. Monad m => a -> m a
return (RNApset -> Gen RNApset) -> RNApset -> Gen RNApset
forall a b. (a -> b) -> a -> b
$ Set (Int, Int) -> Int -> RNApset
RNApset Set (Int, Int)
s (Int
lInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)
instance Q.Arbitrary RNAss where
arbitrary :: Gen RNAss
arbitrary = RNApset -> RNAss
rnapsetRNAss (RNApset -> RNAss) -> Gen RNApset -> Gen RNAss
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen RNApset
forall a. Arbitrary a => Gen a
Q.arbitrary