#if __GLASGOW_HASKELL__ < 710
#endif
module Biobase.Primary.Nuc.Conversion where
import qualified Data.Vector.Unboxed as VU
import Biobase.Primary.Letter (Letter(..), Primary)
import qualified Biobase.Primary.Nuc.DNA as D
import qualified Biobase.Primary.Nuc.RNA as R
import qualified Biobase.Primary.Nuc.XNA as X
rnaTdna = \case
R.A -> D.A
R.C -> D.C
R.G -> D.G
R.U -> D.T
_ -> D.N
dnaTrna = \case
D.A -> R.A
D.C -> R.C
D.G -> R.G
D.T -> R.U
_ -> R.N
rnaGxna = \case
R.A -> X.A
R.C -> X.C
R.G -> X.G
R.U -> X.U
_ -> X.N
dnaGxna = \case
D.A -> X.A
D.C -> X.C
D.G -> X.G
D.T -> X.T
_ -> X.N
xnaSrna = \case
X.A -> R.A
X.C -> R.C
X.G -> R.G
X.U -> R.U
_ -> R.N
xnaSdna = \case
X.A -> D.A
X.C -> D.C
X.G -> D.G
X.T -> D.T
_ -> D.N
class Complement s t where
complement :: s -> t
transcribe :: Primary D.DNA -> Primary R.RNA
transcribe = VU.reverse . complement
instance Complement (Letter R.RNA) (Letter R.RNA) where
complement = \case
R.A -> R.U
R.C -> R.G
R.G -> R.C
R.U -> R.A
R.N -> R.N
instance Complement (Letter D.DNA) (Letter D.DNA) where
complement = \case
D.A -> D.T
D.C -> D.G
D.G -> D.C
D.T -> D.A
D.N -> D.N
instance Complement (Letter D.DNA) (Letter R.RNA) where
complement = \case
D.A -> R.U
D.C -> R.G
D.G -> R.C
D.T -> R.A
D.N -> R.N
instance Complement (Letter R.RNA) (Letter D.DNA) where
complement = \case
R.A -> D.T
R.C -> D.G
R.G -> D.C
R.U -> D.A
R.N -> D.N
#if __GLASGOW_HASKELL__ >= 710
instance
#else
instance
#endif
( Complement s t, VU.Unbox s, VU.Unbox t)
=> Complement (VU.Vector s) (VU.Vector t)
where complement = VU.map complement
#if __GLASGOW_HASKELL__ >= 710
instance
#else
instance
#endif
( Complement s t, Functor f) => Complement (f s) (f t)
where complement = fmap complement