module Bio.RNAfoldParser (
parseRNAfold,
readRNAfold,
module Bio.RNAfoldData
) where
import Bio.RNAfoldData
import Text.ParserCombinators.Parsec
readDouble :: String -> Double
readDouble = read
genParserRNAfold :: GenParser Char st RNAfold
genParserRNAfold = do
string (">")
_sequenceIdentifier <- many1 (noneOf "\n")
newline
_sequence <- many1 (noneOf "\n")
newline
_secondaryStructure <- many1 (oneOf "&().,")
space
string ("(")
_foldingEnergy <- many1 (noneOf ")")
string (")")
return $ RNAfold _sequenceIdentifier _sequence _secondaryStructure (readDouble _foldingEnergy)
parseRNAfold :: [Char] -> Either ParseError RNAfold
parseRNAfold input = parse genParserRNAfold "genParseRNAfold" input
readRNAfold :: String -> IO (Either ParseError RNAfold)
readRNAfold filePath = parseFromFile genParserRNAfold filePath