module Bio.RealWorld.ID where

import qualified Data.ByteString.Char8 as B

class BioID a where
    fromID :: a -> B.ByteString
    toID :: B.ByteString -> a

newtype UniprotID = UniprotID B.ByteString deriving (Int -> UniprotID -> ShowS
[UniprotID] -> ShowS
UniprotID -> String
(Int -> UniprotID -> ShowS)
-> (UniprotID -> String)
-> ([UniprotID] -> ShowS)
-> Show UniprotID
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UniprotID] -> ShowS
$cshowList :: [UniprotID] -> ShowS
show :: UniprotID -> String
$cshow :: UniprotID -> String
showsPrec :: Int -> UniprotID -> ShowS
$cshowsPrec :: Int -> UniprotID -> ShowS
Show, UniprotID -> UniprotID -> Bool
(UniprotID -> UniprotID -> Bool)
-> (UniprotID -> UniprotID -> Bool) -> Eq UniprotID
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UniprotID -> UniprotID -> Bool
$c/= :: UniprotID -> UniprotID -> Bool
== :: UniprotID -> UniprotID -> Bool
$c== :: UniprotID -> UniprotID -> Bool
Eq)

newtype UCSCID = UCSCID B.ByteString deriving (Int -> UCSCID -> ShowS
[UCSCID] -> ShowS
UCSCID -> String
(Int -> UCSCID -> ShowS)
-> (UCSCID -> String) -> ([UCSCID] -> ShowS) -> Show UCSCID
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UCSCID] -> ShowS
$cshowList :: [UCSCID] -> ShowS
show :: UCSCID -> String
$cshow :: UCSCID -> String
showsPrec :: Int -> UCSCID -> ShowS
$cshowsPrec :: Int -> UCSCID -> ShowS
Show, UCSCID -> UCSCID -> Bool
(UCSCID -> UCSCID -> Bool)
-> (UCSCID -> UCSCID -> Bool) -> Eq UCSCID
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UCSCID -> UCSCID -> Bool
$c/= :: UCSCID -> UCSCID -> Bool
== :: UCSCID -> UCSCID -> Bool
$c== :: UCSCID -> UCSCID -> Bool
Eq)

newtype GOID = GOID B.ByteString deriving (Int -> GOID -> ShowS
[GOID] -> ShowS
GOID -> String
(Int -> GOID -> ShowS)
-> (GOID -> String) -> ([GOID] -> ShowS) -> Show GOID
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GOID] -> ShowS
$cshowList :: [GOID] -> ShowS
show :: GOID -> String
$cshow :: GOID -> String
showsPrec :: Int -> GOID -> ShowS
$cshowsPrec :: Int -> GOID -> ShowS
Show, GOID -> GOID -> Bool
(GOID -> GOID -> Bool) -> (GOID -> GOID -> Bool) -> Eq GOID
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GOID -> GOID -> Bool
$c/= :: GOID -> GOID -> Bool
== :: GOID -> GOID -> Bool
$c== :: GOID -> GOID -> Bool
Eq)

-- | ENCODE Accession
newtype EncodeAcc = EncodeAcc B.ByteString deriving (Int -> EncodeAcc -> ShowS
[EncodeAcc] -> ShowS
EncodeAcc -> String
(Int -> EncodeAcc -> ShowS)
-> (EncodeAcc -> String)
-> ([EncodeAcc] -> ShowS)
-> Show EncodeAcc
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [EncodeAcc] -> ShowS
$cshowList :: [EncodeAcc] -> ShowS
show :: EncodeAcc -> String
$cshow :: EncodeAcc -> String
showsPrec :: Int -> EncodeAcc -> ShowS
$cshowsPrec :: Int -> EncodeAcc -> ShowS
Show, EncodeAcc -> EncodeAcc -> Bool
(EncodeAcc -> EncodeAcc -> Bool)
-> (EncodeAcc -> EncodeAcc -> Bool) -> Eq EncodeAcc
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: EncodeAcc -> EncodeAcc -> Bool
$c/= :: EncodeAcc -> EncodeAcc -> Bool
== :: EncodeAcc -> EncodeAcc -> Bool
$c== :: EncodeAcc -> EncodeAcc -> Bool
Eq)

-- | Ensembl ID
newtype EnsemblID = EnsemblID B.ByteString deriving (Int -> EnsemblID -> ShowS
[EnsemblID] -> ShowS
EnsemblID -> String
(Int -> EnsemblID -> ShowS)
-> (EnsemblID -> String)
-> ([EnsemblID] -> ShowS)
-> Show EnsemblID
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [EnsemblID] -> ShowS
$cshowList :: [EnsemblID] -> ShowS
show :: EnsemblID -> String
$cshow :: EnsemblID -> String
showsPrec :: Int -> EnsemblID -> ShowS
$cshowsPrec :: Int -> EnsemblID -> ShowS
Show, EnsemblID -> EnsemblID -> Bool
(EnsemblID -> EnsemblID -> Bool)
-> (EnsemblID -> EnsemblID -> Bool) -> Eq EnsemblID
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: EnsemblID -> EnsemblID -> Bool
$c/= :: EnsemblID -> EnsemblID -> Bool
== :: EnsemblID -> EnsemblID -> Bool
$c== :: EnsemblID -> EnsemblID -> Bool
Eq)

instance BioID EncodeAcc where
    fromID :: EncodeAcc -> ByteString
fromID (EncodeAcc ByteString
x) = ByteString
x
    toID :: ByteString -> EncodeAcc
toID = ByteString -> EncodeAcc
EncodeAcc

instance BioID EnsemblID where
    fromID :: EnsemblID -> ByteString
fromID (EnsemblID ByteString
x) = ByteString
x
    toID :: ByteString -> EnsemblID
toID = ByteString -> EnsemblID
EnsemblID