{-# LANGUAGE DeriveGeneric #-}
module Poseidon.AccessionIDs where
import qualified Data.Text as T
import GHC.Generics (Generic)
import qualified Text.Regex.TDFA as Reg
data AccessionID =
INSDCProject T.Text
| INSDCStudy T.Text
| INSDCBioSample T.Text
| INSDCSample T.Text
| INSDCExperiment T.Text
| INSDCRun T.Text
| INSDCAnalysis T.Text
| OtherID T.Text
deriving (AccessionID -> AccessionID -> Bool
(AccessionID -> AccessionID -> Bool)
-> (AccessionID -> AccessionID -> Bool) -> Eq AccessionID
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: AccessionID -> AccessionID -> Bool
== :: AccessionID -> AccessionID -> Bool
$c/= :: AccessionID -> AccessionID -> Bool
/= :: AccessionID -> AccessionID -> Bool
Eq, Eq AccessionID
Eq AccessionID =>
(AccessionID -> AccessionID -> Ordering)
-> (AccessionID -> AccessionID -> Bool)
-> (AccessionID -> AccessionID -> Bool)
-> (AccessionID -> AccessionID -> Bool)
-> (AccessionID -> AccessionID -> Bool)
-> (AccessionID -> AccessionID -> AccessionID)
-> (AccessionID -> AccessionID -> AccessionID)
-> Ord AccessionID
AccessionID -> AccessionID -> Bool
AccessionID -> AccessionID -> Ordering
AccessionID -> AccessionID -> AccessionID
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
$ccompare :: AccessionID -> AccessionID -> Ordering
compare :: AccessionID -> AccessionID -> Ordering
$c< :: AccessionID -> AccessionID -> Bool
< :: AccessionID -> AccessionID -> Bool
$c<= :: AccessionID -> AccessionID -> Bool
<= :: AccessionID -> AccessionID -> Bool
$c> :: AccessionID -> AccessionID -> Bool
> :: AccessionID -> AccessionID -> Bool
$c>= :: AccessionID -> AccessionID -> Bool
>= :: AccessionID -> AccessionID -> Bool
$cmax :: AccessionID -> AccessionID -> AccessionID
max :: AccessionID -> AccessionID -> AccessionID
$cmin :: AccessionID -> AccessionID -> AccessionID
min :: AccessionID -> AccessionID -> AccessionID
Ord, (forall x. AccessionID -> Rep AccessionID x)
-> (forall x. Rep AccessionID x -> AccessionID)
-> Generic AccessionID
forall x. Rep AccessionID x -> AccessionID
forall x. AccessionID -> Rep AccessionID x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. AccessionID -> Rep AccessionID x
from :: forall x. AccessionID -> Rep AccessionID x
$cto :: forall x. Rep AccessionID x -> AccessionID
to :: forall x. Rep AccessionID x -> AccessionID
Generic)
instance Show AccessionID where
show :: AccessionID -> String
show (INSDCProject Text
x) = Text -> String
T.unpack Text
x
show (INSDCStudy Text
x) = Text -> String
T.unpack Text
x
show (INSDCBioSample Text
x) = Text -> String
T.unpack Text
x
show (INSDCSample Text
x) = Text -> String
T.unpack Text
x
show (INSDCExperiment Text
x) = Text -> String
T.unpack Text
x
show (INSDCRun Text
x) = Text -> String
T.unpack Text
x
show (INSDCAnalysis Text
x) = Text -> String
T.unpack Text
x
show (OtherID Text
x) = Text -> String
T.unpack Text
x
makeAccessionID :: MonadFail m => T.Text -> m AccessionID
makeAccessionID :: forall (m :: * -> *). MonadFail m => Text -> m AccessionID
makeAccessionID Text
x
| (Text -> String
T.unpack Text
x) String -> String -> Bool
forall source source1 target.
(RegexMaker Regex CompOption ExecOption source,
RegexContext Regex source1 target) =>
source1 -> source -> target
Reg.=~ (String
"PRJ[EDN][A-Z][0-9]+" :: String) = AccessionID -> m AccessionID
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (AccessionID -> m AccessionID) -> AccessionID -> m AccessionID
forall a b. (a -> b) -> a -> b
$ Text -> AccessionID
INSDCProject Text
x
| (Text -> String
T.unpack Text
x) String -> String -> Bool
forall source source1 target.
(RegexMaker Regex CompOption ExecOption source,
RegexContext Regex source1 target) =>
source1 -> source -> target
Reg.=~ (String
"[EDS]RP[0-9]{6,}" :: String) = AccessionID -> m AccessionID
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (AccessionID -> m AccessionID) -> AccessionID -> m AccessionID
forall a b. (a -> b) -> a -> b
$ Text -> AccessionID
INSDCStudy Text
x
| (Text -> String
T.unpack Text
x) String -> String -> Bool
forall source source1 target.
(RegexMaker Regex CompOption ExecOption source,
RegexContext Regex source1 target) =>
source1 -> source -> target
Reg.=~ (String
"SAM[EDN][A-Z]?[0-9]+" :: String) = AccessionID -> m AccessionID
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (AccessionID -> m AccessionID) -> AccessionID -> m AccessionID
forall a b. (a -> b) -> a -> b
$ Text -> AccessionID
INSDCBioSample Text
x
| (Text -> String
T.unpack Text
x) String -> String -> Bool
forall source source1 target.
(RegexMaker Regex CompOption ExecOption source,
RegexContext Regex source1 target) =>
source1 -> source -> target
Reg.=~ (String
"[EDS]RS[0-9]{6,}" :: String) = AccessionID -> m AccessionID
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (AccessionID -> m AccessionID) -> AccessionID -> m AccessionID
forall a b. (a -> b) -> a -> b
$ Text -> AccessionID
INSDCSample Text
x
| (Text -> String
T.unpack Text
x) String -> String -> Bool
forall source source1 target.
(RegexMaker Regex CompOption ExecOption source,
RegexContext Regex source1 target) =>
source1 -> source -> target
Reg.=~ (String
"[EDS]RX[0-9]{6,}" :: String) = AccessionID -> m AccessionID
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (AccessionID -> m AccessionID) -> AccessionID -> m AccessionID
forall a b. (a -> b) -> a -> b
$ Text -> AccessionID
INSDCExperiment Text
x
| (Text -> String
T.unpack Text
x) String -> String -> Bool
forall source source1 target.
(RegexMaker Regex CompOption ExecOption source,
RegexContext Regex source1 target) =>
source1 -> source -> target
Reg.=~ (String
"[EDS]RR[0-9]{6,}" :: String) = AccessionID -> m AccessionID
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (AccessionID -> m AccessionID) -> AccessionID -> m AccessionID
forall a b. (a -> b) -> a -> b
$ Text -> AccessionID
INSDCRun Text
x
| (Text -> String
T.unpack Text
x) String -> String -> Bool
forall source source1 target.
(RegexMaker Regex CompOption ExecOption source,
RegexContext Regex source1 target) =>
source1 -> source -> target
Reg.=~ (String
"[EDS]RZ[0-9]{6,}" :: String) = AccessionID -> m AccessionID
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (AccessionID -> m AccessionID) -> AccessionID -> m AccessionID
forall a b. (a -> b) -> a -> b
$ Text -> AccessionID
INSDCAnalysis Text
x
| Bool
otherwise = AccessionID -> m AccessionID
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (AccessionID -> m AccessionID) -> AccessionID -> m AccessionID
forall a b. (a -> b) -> a -> b
$ Text -> AccessionID
OtherID Text
x