module Biobase.Types.Position where
import Control.DeepSeq
import Control.Lens hiding (Index, index)
import Data.Data
import GHC.Generics (Generic)
import GHC.TypeNats
import Prelude hiding (length)
import Text.Printf
import Biobase.Types.Index
import Biobase.Types.Strand
import Data.Info
data FwdPosition
= FwdPosition
{ FwdPosition -> Strand
_fwdStrand :: !Strand
, FwdPosition -> Index 0
_fwdStart :: !(Index 0)
}
deriving (FwdPosition -> FwdPosition -> Bool
(FwdPosition -> FwdPosition -> Bool)
-> (FwdPosition -> FwdPosition -> Bool) -> Eq FwdPosition
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: FwdPosition -> FwdPosition -> Bool
$c/= :: FwdPosition -> FwdPosition -> Bool
== :: FwdPosition -> FwdPosition -> Bool
$c== :: FwdPosition -> FwdPosition -> Bool
Eq,Eq FwdPosition
Eq FwdPosition
-> (FwdPosition -> FwdPosition -> Ordering)
-> (FwdPosition -> FwdPosition -> Bool)
-> (FwdPosition -> FwdPosition -> Bool)
-> (FwdPosition -> FwdPosition -> Bool)
-> (FwdPosition -> FwdPosition -> Bool)
-> (FwdPosition -> FwdPosition -> FwdPosition)
-> (FwdPosition -> FwdPosition -> FwdPosition)
-> Ord FwdPosition
FwdPosition -> FwdPosition -> Bool
FwdPosition -> FwdPosition -> Ordering
FwdPosition -> FwdPosition -> FwdPosition
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 :: FwdPosition -> FwdPosition -> FwdPosition
$cmin :: FwdPosition -> FwdPosition -> FwdPosition
max :: FwdPosition -> FwdPosition -> FwdPosition
$cmax :: FwdPosition -> FwdPosition -> FwdPosition
>= :: FwdPosition -> FwdPosition -> Bool
$c>= :: FwdPosition -> FwdPosition -> Bool
> :: FwdPosition -> FwdPosition -> Bool
$c> :: FwdPosition -> FwdPosition -> Bool
<= :: FwdPosition -> FwdPosition -> Bool
$c<= :: FwdPosition -> FwdPosition -> Bool
< :: FwdPosition -> FwdPosition -> Bool
$c< :: FwdPosition -> FwdPosition -> Bool
compare :: FwdPosition -> FwdPosition -> Ordering
$ccompare :: FwdPosition -> FwdPosition -> Ordering
$cp1Ord :: Eq FwdPosition
Ord,ReadPrec [FwdPosition]
ReadPrec FwdPosition
Int -> ReadS FwdPosition
ReadS [FwdPosition]
(Int -> ReadS FwdPosition)
-> ReadS [FwdPosition]
-> ReadPrec FwdPosition
-> ReadPrec [FwdPosition]
-> Read FwdPosition
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [FwdPosition]
$creadListPrec :: ReadPrec [FwdPosition]
readPrec :: ReadPrec FwdPosition
$creadPrec :: ReadPrec FwdPosition
readList :: ReadS [FwdPosition]
$creadList :: ReadS [FwdPosition]
readsPrec :: Int -> ReadS FwdPosition
$creadsPrec :: Int -> ReadS FwdPosition
Read,Int -> FwdPosition -> ShowS
[FwdPosition] -> ShowS
FwdPosition -> String
(Int -> FwdPosition -> ShowS)
-> (FwdPosition -> String)
-> ([FwdPosition] -> ShowS)
-> Show FwdPosition
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [FwdPosition] -> ShowS
$cshowList :: [FwdPosition] -> ShowS
show :: FwdPosition -> String
$cshow :: FwdPosition -> String
showsPrec :: Int -> FwdPosition -> ShowS
$cshowsPrec :: Int -> FwdPosition -> ShowS
Show,Typeable FwdPosition
DataType
Constr
Typeable FwdPosition
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> FwdPosition -> c FwdPosition)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c FwdPosition)
-> (FwdPosition -> Constr)
-> (FwdPosition -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c FwdPosition))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c FwdPosition))
-> ((forall b. Data b => b -> b) -> FwdPosition -> FwdPosition)
-> (forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> FwdPosition -> r)
-> (forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> FwdPosition -> r)
-> (forall u. (forall d. Data d => d -> u) -> FwdPosition -> [u])
-> (forall u.
Int -> (forall d. Data d => d -> u) -> FwdPosition -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> FwdPosition -> m FwdPosition)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> FwdPosition -> m FwdPosition)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> FwdPosition -> m FwdPosition)
-> Data FwdPosition
FwdPosition -> DataType
FwdPosition -> Constr
(forall b. Data b => b -> b) -> FwdPosition -> FwdPosition
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> FwdPosition -> c FwdPosition
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c FwdPosition
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) -> FwdPosition -> u
forall u. (forall d. Data d => d -> u) -> FwdPosition -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> FwdPosition -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> FwdPosition -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> FwdPosition -> m FwdPosition
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> FwdPosition -> m FwdPosition
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c FwdPosition
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> FwdPosition -> c FwdPosition
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c FwdPosition)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c FwdPosition)
$cFwdPosition :: Constr
$tFwdPosition :: DataType
gmapMo :: (forall d. Data d => d -> m d) -> FwdPosition -> m FwdPosition
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> FwdPosition -> m FwdPosition
gmapMp :: (forall d. Data d => d -> m d) -> FwdPosition -> m FwdPosition
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> FwdPosition -> m FwdPosition
gmapM :: (forall d. Data d => d -> m d) -> FwdPosition -> m FwdPosition
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> FwdPosition -> m FwdPosition
gmapQi :: Int -> (forall d. Data d => d -> u) -> FwdPosition -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> FwdPosition -> u
gmapQ :: (forall d. Data d => d -> u) -> FwdPosition -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> FwdPosition -> [u]
gmapQr :: (r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> FwdPosition -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> FwdPosition -> r
gmapQl :: (r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> FwdPosition -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> FwdPosition -> r
gmapT :: (forall b. Data b => b -> b) -> FwdPosition -> FwdPosition
$cgmapT :: (forall b. Data b => b -> b) -> FwdPosition -> FwdPosition
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c FwdPosition)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c FwdPosition)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c FwdPosition)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c FwdPosition)
dataTypeOf :: FwdPosition -> DataType
$cdataTypeOf :: FwdPosition -> DataType
toConstr :: FwdPosition -> Constr
$ctoConstr :: FwdPosition -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c FwdPosition
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c FwdPosition
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> FwdPosition -> c FwdPosition
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> FwdPosition -> c FwdPosition
$cp1Data :: Typeable FwdPosition
Data,Typeable,(forall x. FwdPosition -> Rep FwdPosition x)
-> (forall x. Rep FwdPosition x -> FwdPosition)
-> Generic FwdPosition
forall x. Rep FwdPosition x -> FwdPosition
forall x. FwdPosition -> Rep FwdPosition x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep FwdPosition x -> FwdPosition
$cfrom :: forall x. FwdPosition -> Rep FwdPosition x
Generic)
makeLenses ''FwdPosition
makePrisms ''FwdPosition
instance NFData FwdPosition
instance Info FwdPosition where
info :: FwdPosition -> String
info (FwdPosition Strand
s Index 0
x) = String -> String -> Int -> String
forall r. PrintfType r => String -> r
printf String
"%s %d" (Strand -> String
forall a. Show a => a -> String
show Strand
s) (Index 0 -> Int
forall (t :: Nat). KnownNat t => Index t -> Int
toInt0 Index 0
x)
instance Reversing FwdPosition where
{-# Inline reversing #-}
reversing :: FwdPosition -> FwdPosition
reversing FwdPosition
x = case FwdPosition
xFwdPosition -> Getting Strand FwdPosition Strand -> Strand
forall s a. s -> Getting a s a -> a
^.Getting Strand FwdPosition Strand
Lens' FwdPosition Strand
fwdStrand of
Strand
PlusStrand -> ASetter FwdPosition FwdPosition Strand Strand
-> Strand -> FwdPosition -> FwdPosition
forall s t a b. ASetter s t a b -> b -> s -> t
set ASetter FwdPosition FwdPosition Strand Strand
Lens' FwdPosition Strand
fwdStrand Strand
MinusStrand (FwdPosition -> FwdPosition) -> FwdPosition -> FwdPosition
forall a b. (a -> b) -> a -> b
$ FwdPosition
x
Strand
MinusStrand -> ASetter FwdPosition FwdPosition Strand Strand
-> Strand -> FwdPosition -> FwdPosition
forall s t a b. ASetter s t a b -> b -> s -> t
set ASetter FwdPosition FwdPosition Strand Strand
Lens' FwdPosition Strand
fwdStrand Strand
PlusStrand (FwdPosition -> FwdPosition) -> FwdPosition -> FwdPosition
forall a b. (a -> b) -> a -> b
$ FwdPosition
x
Strand
UnknownStrand -> FwdPosition
x