module Biobase.Types.Codon where

import Control.Lens
import GHC.Generics (Generic)



-- | A single codon.
--
-- TODO needs to go into its own place

data Codon c = Codon !c !c !c
  deriving (Codon c -> Codon c -> Bool
(Codon c -> Codon c -> Bool)
-> (Codon c -> Codon c -> Bool) -> Eq (Codon c)
forall c. Eq c => Codon c -> Codon c -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Codon c -> Codon c -> Bool
$c/= :: forall c. Eq c => Codon c -> Codon c -> Bool
== :: Codon c -> Codon c -> Bool
$c== :: forall c. Eq c => Codon c -> Codon c -> Bool
Eq,Eq (Codon c)
Eq (Codon c)
-> (Codon c -> Codon c -> Ordering)
-> (Codon c -> Codon c -> Bool)
-> (Codon c -> Codon c -> Bool)
-> (Codon c -> Codon c -> Bool)
-> (Codon c -> Codon c -> Bool)
-> (Codon c -> Codon c -> Codon c)
-> (Codon c -> Codon c -> Codon c)
-> Ord (Codon c)
Codon c -> Codon c -> Bool
Codon c -> Codon c -> Ordering
Codon c -> Codon c -> Codon c
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
forall c. Ord c => Eq (Codon c)
forall c. Ord c => Codon c -> Codon c -> Bool
forall c. Ord c => Codon c -> Codon c -> Ordering
forall c. Ord c => Codon c -> Codon c -> Codon c
min :: Codon c -> Codon c -> Codon c
$cmin :: forall c. Ord c => Codon c -> Codon c -> Codon c
max :: Codon c -> Codon c -> Codon c
$cmax :: forall c. Ord c => Codon c -> Codon c -> Codon c
>= :: Codon c -> Codon c -> Bool
$c>= :: forall c. Ord c => Codon c -> Codon c -> Bool
> :: Codon c -> Codon c -> Bool
$c> :: forall c. Ord c => Codon c -> Codon c -> Bool
<= :: Codon c -> Codon c -> Bool
$c<= :: forall c. Ord c => Codon c -> Codon c -> Bool
< :: Codon c -> Codon c -> Bool
$c< :: forall c. Ord c => Codon c -> Codon c -> Bool
compare :: Codon c -> Codon c -> Ordering
$ccompare :: forall c. Ord c => Codon c -> Codon c -> Ordering
$cp1Ord :: forall c. Ord c => Eq (Codon c)
Ord,ReadPrec [Codon c]
ReadPrec (Codon c)
Int -> ReadS (Codon c)
ReadS [Codon c]
(Int -> ReadS (Codon c))
-> ReadS [Codon c]
-> ReadPrec (Codon c)
-> ReadPrec [Codon c]
-> Read (Codon c)
forall c. Read c => ReadPrec [Codon c]
forall c. Read c => ReadPrec (Codon c)
forall c. Read c => Int -> ReadS (Codon c)
forall c. Read c => ReadS [Codon c]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Codon c]
$creadListPrec :: forall c. Read c => ReadPrec [Codon c]
readPrec :: ReadPrec (Codon c)
$creadPrec :: forall c. Read c => ReadPrec (Codon c)
readList :: ReadS [Codon c]
$creadList :: forall c. Read c => ReadS [Codon c]
readsPrec :: Int -> ReadS (Codon c)
$creadsPrec :: forall c. Read c => Int -> ReadS (Codon c)
Read,Int -> Codon c -> ShowS
[Codon c] -> ShowS
Codon c -> String
(Int -> Codon c -> ShowS)
-> (Codon c -> String) -> ([Codon c] -> ShowS) -> Show (Codon c)
forall c. Show c => Int -> Codon c -> ShowS
forall c. Show c => [Codon c] -> ShowS
forall c. Show c => Codon c -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Codon c] -> ShowS
$cshowList :: forall c. Show c => [Codon c] -> ShowS
show :: Codon c -> String
$cshow :: forall c. Show c => Codon c -> String
showsPrec :: Int -> Codon c -> ShowS
$cshowsPrec :: forall c. Show c => Int -> Codon c -> ShowS
Show,(forall x. Codon c -> Rep (Codon c) x)
-> (forall x. Rep (Codon c) x -> Codon c) -> Generic (Codon c)
forall x. Rep (Codon c) x -> Codon c
forall x. Codon c -> Rep (Codon c) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall c x. Rep (Codon c) x -> Codon c
forall c x. Codon c -> Rep (Codon c) x
$cto :: forall c x. Rep (Codon c) x -> Codon c
$cfrom :: forall c x. Codon c -> Rep (Codon c) x
Generic,a -> Codon b -> Codon a
(a -> b) -> Codon a -> Codon b
(forall a b. (a -> b) -> Codon a -> Codon b)
-> (forall a b. a -> Codon b -> Codon a) -> Functor Codon
forall a b. a -> Codon b -> Codon a
forall a b. (a -> b) -> Codon a -> Codon b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
<$ :: a -> Codon b -> Codon a
$c<$ :: forall a b. a -> Codon b -> Codon a
fmap :: (a -> b) -> Codon a -> Codon b
$cfmap :: forall a b. (a -> b) -> Codon a -> Codon b
Functor,Codon a -> Bool
(a -> m) -> Codon a -> m
(a -> b -> b) -> b -> Codon a -> b
(forall m. Monoid m => Codon m -> m)
-> (forall m a. Monoid m => (a -> m) -> Codon a -> m)
-> (forall m a. Monoid m => (a -> m) -> Codon a -> m)
-> (forall a b. (a -> b -> b) -> b -> Codon a -> b)
-> (forall a b. (a -> b -> b) -> b -> Codon a -> b)
-> (forall b a. (b -> a -> b) -> b -> Codon a -> b)
-> (forall b a. (b -> a -> b) -> b -> Codon a -> b)
-> (forall a. (a -> a -> a) -> Codon a -> a)
-> (forall a. (a -> a -> a) -> Codon a -> a)
-> (forall a. Codon a -> [a])
-> (forall a. Codon a -> Bool)
-> (forall a. Codon a -> Int)
-> (forall a. Eq a => a -> Codon a -> Bool)
-> (forall a. Ord a => Codon a -> a)
-> (forall a. Ord a => Codon a -> a)
-> (forall a. Num a => Codon a -> a)
-> (forall a. Num a => Codon a -> a)
-> Foldable Codon
forall a. Eq a => a -> Codon a -> Bool
forall a. Num a => Codon a -> a
forall a. Ord a => Codon a -> a
forall m. Monoid m => Codon m -> m
forall a. Codon a -> Bool
forall a. Codon a -> Int
forall a. Codon a -> [a]
forall a. (a -> a -> a) -> Codon a -> a
forall m a. Monoid m => (a -> m) -> Codon a -> m
forall b a. (b -> a -> b) -> b -> Codon a -> b
forall a b. (a -> b -> b) -> b -> Codon a -> b
forall (t :: * -> *).
(forall m. Monoid m => t m -> m)
-> (forall m a. Monoid m => (a -> m) -> t a -> m)
-> (forall m a. Monoid m => (a -> m) -> t a -> m)
-> (forall a b. (a -> b -> b) -> b -> t a -> b)
-> (forall a b. (a -> b -> b) -> b -> t a -> b)
-> (forall b a. (b -> a -> b) -> b -> t a -> b)
-> (forall b a. (b -> a -> b) -> b -> t a -> b)
-> (forall a. (a -> a -> a) -> t a -> a)
-> (forall a. (a -> a -> a) -> t a -> a)
-> (forall a. t a -> [a])
-> (forall a. t a -> Bool)
-> (forall a. t a -> Int)
-> (forall a. Eq a => a -> t a -> Bool)
-> (forall a. Ord a => t a -> a)
-> (forall a. Ord a => t a -> a)
-> (forall a. Num a => t a -> a)
-> (forall a. Num a => t a -> a)
-> Foldable t
product :: Codon a -> a
$cproduct :: forall a. Num a => Codon a -> a
sum :: Codon a -> a
$csum :: forall a. Num a => Codon a -> a
minimum :: Codon a -> a
$cminimum :: forall a. Ord a => Codon a -> a
maximum :: Codon a -> a
$cmaximum :: forall a. Ord a => Codon a -> a
elem :: a -> Codon a -> Bool
$celem :: forall a. Eq a => a -> Codon a -> Bool
length :: Codon a -> Int
$clength :: forall a. Codon a -> Int
null :: Codon a -> Bool
$cnull :: forall a. Codon a -> Bool
toList :: Codon a -> [a]
$ctoList :: forall a. Codon a -> [a]
foldl1 :: (a -> a -> a) -> Codon a -> a
$cfoldl1 :: forall a. (a -> a -> a) -> Codon a -> a
foldr1 :: (a -> a -> a) -> Codon a -> a
$cfoldr1 :: forall a. (a -> a -> a) -> Codon a -> a
foldl' :: (b -> a -> b) -> b -> Codon a -> b
$cfoldl' :: forall b a. (b -> a -> b) -> b -> Codon a -> b
foldl :: (b -> a -> b) -> b -> Codon a -> b
$cfoldl :: forall b a. (b -> a -> b) -> b -> Codon a -> b
foldr' :: (a -> b -> b) -> b -> Codon a -> b
$cfoldr' :: forall a b. (a -> b -> b) -> b -> Codon a -> b
foldr :: (a -> b -> b) -> b -> Codon a -> b
$cfoldr :: forall a b. (a -> b -> b) -> b -> Codon a -> b
foldMap' :: (a -> m) -> Codon a -> m
$cfoldMap' :: forall m a. Monoid m => (a -> m) -> Codon a -> m
foldMap :: (a -> m) -> Codon a -> m
$cfoldMap :: forall m a. Monoid m => (a -> m) -> Codon a -> m
fold :: Codon m -> m
$cfold :: forall m. Monoid m => Codon m -> m
Foldable,Functor Codon
Foldable Codon
Functor Codon
-> Foldable Codon
-> (forall (f :: * -> *) a b.
    Applicative f =>
    (a -> f b) -> Codon a -> f (Codon b))
-> (forall (f :: * -> *) a.
    Applicative f =>
    Codon (f a) -> f (Codon a))
-> (forall (m :: * -> *) a b.
    Monad m =>
    (a -> m b) -> Codon a -> m (Codon b))
-> (forall (m :: * -> *) a. Monad m => Codon (m a) -> m (Codon a))
-> Traversable Codon
(a -> f b) -> Codon a -> f (Codon b)
forall (t :: * -> *).
Functor t
-> Foldable t
-> (forall (f :: * -> *) a b.
    Applicative f =>
    (a -> f b) -> t a -> f (t b))
-> (forall (f :: * -> *) a. Applicative f => t (f a) -> f (t a))
-> (forall (m :: * -> *) a b.
    Monad m =>
    (a -> m b) -> t a -> m (t b))
-> (forall (m :: * -> *) a. Monad m => t (m a) -> m (t a))
-> Traversable t
forall (m :: * -> *) a. Monad m => Codon (m a) -> m (Codon a)
forall (f :: * -> *) a. Applicative f => Codon (f a) -> f (Codon a)
forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> Codon a -> m (Codon b)
forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> Codon a -> f (Codon b)
sequence :: Codon (m a) -> m (Codon a)
$csequence :: forall (m :: * -> *) a. Monad m => Codon (m a) -> m (Codon a)
mapM :: (a -> m b) -> Codon a -> m (Codon b)
$cmapM :: forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> Codon a -> m (Codon b)
sequenceA :: Codon (f a) -> f (Codon a)
$csequenceA :: forall (f :: * -> *) a. Applicative f => Codon (f a) -> f (Codon a)
traverse :: (a -> f b) -> Codon a -> f (Codon b)
$ctraverse :: forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> Codon a -> f (Codon b)
$cp2Traversable :: Foldable Codon
$cp1Traversable :: Functor Codon
Traversable)

instance Field1 (Codon c) (Codon c) c c
instance Field2 (Codon c) (Codon c) c c
instance Field3 (Codon c) (Codon c) c c
instance Each (Codon c) (Codon c') c c'