module Bio.Utils.Monomer ( Symbol(..) , FromSymbol(..) , ThreeSymbols(..) , FromThreeSymbols (..) ) where import Data.Text ( Text ) class Symbol a where symbol :: a -> Char instance Symbol Char where symbol :: Char -> Char symbol = Char -> Char forall a. a -> a id class FromSymbol a where fromSymbol :: Char -> Maybe a fromSymbol = (Char -> Maybe a) -> (a -> Maybe a) -> Either Char a -> Maybe a forall a c b. (a -> c) -> (b -> c) -> Either a b -> c either (Maybe a -> Char -> Maybe a forall a b. a -> b -> a const Maybe a forall a. Maybe a Nothing) a -> Maybe a forall a. a -> Maybe a Just (Either Char a -> Maybe a) -> (Char -> Either Char a) -> Char -> Maybe a forall b c a. (b -> c) -> (a -> b) -> a -> c . Char -> Either Char a forall a. FromSymbol a => Char -> Either Char a fromSymbolE fromSymbolE :: Char -> Either Char a fromSymbolE Char c = Either Char a -> (a -> Either Char a) -> Maybe a -> Either Char a forall b a. b -> (a -> b) -> Maybe a -> b maybe (Char -> Either Char a forall a b. a -> Either a b Left Char c) a -> Either Char a forall a b. b -> Either a b Right (Maybe a -> Either Char a) -> Maybe a -> Either Char a forall a b. (a -> b) -> a -> b $ Char -> Maybe a forall a. FromSymbol a => Char -> Maybe a fromSymbol Char c instance FromSymbol Char where fromSymbolE :: Char -> Either Char Char fromSymbolE = Char -> Either Char Char forall a b. b -> Either a b Right class ThreeSymbols a where threeSymbols :: a -> Text class FromThreeSymbols a where fromThreeSymbols :: Text -> Maybe a