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
|