31 lines
641 B
Haskell
31 lines
641 B
Haskell
|
|
||
|
import Control.Arrow
|
||
|
import Data.Foldable
|
||
|
import Data.List
|
||
|
import System.Environment
|
||
|
|
||
|
main = do
|
||
|
files <- getArgs
|
||
|
forM_ files $ \ file -> do
|
||
|
convertM file
|
||
|
|
||
|
convertM :: FilePath -> IO ()
|
||
|
convertM file = do
|
||
|
contents <- readFile file
|
||
|
seq (length contents) (return ())
|
||
|
writeFile file (convert contents)
|
||
|
|
||
|
convert :: String -> String
|
||
|
convert =
|
||
|
lines >>>
|
||
|
groupBy (\ a b -> take 1 a == take 1 b) >>>
|
||
|
map go >>>
|
||
|
concat >>>
|
||
|
unlines
|
||
|
where
|
||
|
go :: [String] -> [String]
|
||
|
go (a : r)
|
||
|
| ">" `isPrefixOf` a
|
||
|
= "``` haskell" : map (drop 2) (a : r) ++ "```" : []
|
||
|
go x = x
|