diff options
Diffstat (limited to 'lec07/StringBuffer.hs')
-rw-r--r-- | lec07/StringBuffer.hs | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/lec07/StringBuffer.hs b/lec07/StringBuffer.hs new file mode 100644 index 0000000..138ef3f --- /dev/null +++ b/lec07/StringBuffer.hs @@ -0,0 +1,22 @@ +{-# LANGUAGE FlexibleInstances, TypeSynonymInstances #-} +module StringBuffer where + +import Data.Monoid + +import Buffer + +instance Buffer String where + toString = id + fromString = id + line n b = safeIndex n (lines b) + replaceLine n l b = unlines . uncurry replaceLine' . splitAt n . lines $ b + where replaceLine' pre [] = pre + replaceLine' pre (_:ls) = pre ++ l:ls + numLines = length . lines + value = length . words + +safeIndex :: Int -> [a] -> Maybe a +safeIndex n _ | n < 0 = Nothing +safeIndex _ [] = Nothing +safeIndex 0 (x:_) = Just x +safeIndex n (_:xs) = safeIndex (n-1) xs
\ No newline at end of file |