18 lines
523 B
Haskell
18 lines
523 B
Haskell
import Data.List ( groupBy )
|
|
|
|
parseFasta :: FilePath -> IO ()
|
|
parseFasta fileName = do
|
|
file <- readFile fileName
|
|
let pairedFasta = readFasta $ lines file
|
|
mapM_ (\(name, code) -> putStrLn $ name ++ ": " ++ code) pairedFasta
|
|
|
|
readFasta :: [String] -> [(String, String)]
|
|
readFasta = pair . map concat . groupBy (\x y -> notName x && notName y)
|
|
where
|
|
notName :: String -> Bool
|
|
notName = (/=) '>' . head
|
|
|
|
pair :: [String] -> [(String, String)]
|
|
pair [] = []
|
|
pair (x : y : xs) = (drop 1 x, y) : pair xs
|