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 = id class FromSymbol a where fromSymbol :: Char -> Maybe a fromSymbol = either (const Nothing) Just . fromSymbolE fromSymbolE :: Char -> Either Char a fromSymbolE c = maybe (Left c) Right $ fromSymbol c instance FromSymbol Char where fromSymbolE = Right class ThreeSymbols a where threeSymbols :: a -> Text class FromThreeSymbols a where fromThreeSymbols :: Text -> Maybe a