Так что имейте это
type DocName = FilePath
type Line = (Int,String)
type Document = [Line]
splitLines :: String -> Document
splitLines [] = []
splitLines str = zip [0..(length listStr)] listStr
where
listStr = [getLine] ++ map snd (splitLines getRest)
getLine = (takeWhile (/='\n') str)
getRest = (dropWhile (=='\n') (dropWhile (/='\n') str))
работает нормально, за исключением того, что, я думаю, мне тоже нужны пустые строки
splitLines "test\nthis\nstring\n" should be
[(0,"test"),(1,"this"),(2,"string"),(3,"")]
Не совсем уверен, как я мог это сделать. Есть идеи?
Нужно ли переписать это с чем-то другим?
Должен ли я использовать функцию высокого порядка, например, Foldr?
Спасибо.
Наконец-то понял, спасибо.
splitLines :: String -> Document
splitLines "" = [(0,"")]
splitLines str = zip [0..(length listStr)] listStr
where
listStr = [getLine] ++ map snd (splitLines getRest)
getLine = takeWhile (/='\n') str
getRest = tail (dropWhile (/='\n') str)