module ELynx.Character.Character
( Character (..),
fromChar,
toChar,
fromString,
toString,
CharacterX (..),
isGap,
CharacterI (..),
isUnknown,
isIUPAC,
isStandard,
convert,
)
where
import Data.ByteString.Internal (c2w, w2c)
import qualified Data.Set as S
import Data.Vector.Unboxed.Base (Unbox)
import Data.Word8 (Word8)
class (Show a, Read a, Eq a, Ord a, Enum a, Bounded a, Unbox a) => Character a where
toWord :: a -> Word8
fromWord :: Word8 -> a
toChar :: Character a => a -> Char
toChar :: forall a. Character a => a -> Char
toChar = Word8 -> Char
w2c forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Character a => a -> Word8
toWord
fromChar :: Character a => Char -> a
fromChar :: forall a. Character a => Char -> a
fromChar = forall a. Character a => Word8 -> a
fromWord forall b c a. (b -> c) -> (a -> b) -> a -> c
. Char -> Word8
c2w
toString :: Character a => [a] -> String
toString :: forall a. Character a => [a] -> String
toString = forall a b. (a -> b) -> [a] -> [b]
map forall a. Character a => a -> Char
toChar
fromString :: Character a => String -> [a]
fromString :: forall a. Character a => String -> [a]
fromString = forall a b. (a -> b) -> [a] -> [b]
map forall a. Character a => Char -> a
fromChar
class Character a => CharacterX a where
gap :: a
isGap :: CharacterX a => a -> Bool
isGap :: forall a. CharacterX a => a -> Bool
isGap a
c = a
c forall a. Eq a => a -> a -> Bool
== forall a. CharacterX a => a
gap
class CharacterX a => CharacterI a where
unknown :: a
iupac :: [a]
toStandard :: a -> [a]
isUnknown :: CharacterI a => a -> Bool
isUnknown :: forall a. CharacterI a => a -> Bool
isUnknown a
c = a
c forall a. Eq a => a -> a -> Bool
== forall a. CharacterI a => a
unknown
iupacLookup :: CharacterI a => S.Set a
iupacLookup :: forall a. CharacterI a => Set a
iupacLookup = forall a. Ord a => [a] -> Set a
S.fromList forall a. CharacterI a => [a]
iupac
isIUPAC :: CharacterI a => a -> Bool
isIUPAC :: forall a. CharacterI a => a -> Bool
isIUPAC a
c = a
c forall a. Ord a => a -> Set a -> Bool
`S.member` forall a. CharacterI a => Set a
iupacLookup
isStandard :: CharacterI a => a -> Bool
isStandard :: forall a. CharacterI a => a -> Bool
isStandard a
c = Bool -> Bool
not forall a b. (a -> b) -> a -> b
$ forall a. CharacterI a => a -> Bool
isIUPAC a
c
convert :: (Character a, Character b) => a -> b
convert :: forall a b. (Character a, Character b) => a -> b
convert = forall a. Character a => Word8 -> a
fromWord forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Character a => a -> Word8
toWord