diff options
author | Edoardo La Greca | 2025-09-09 20:38:00 +0200 |
---|---|---|
committer | Edoardo La Greca | 2025-09-09 20:38:00 +0200 |
commit | f46dafc461e4ee3fa1637051284f89b443f00a51 (patch) | |
tree | bfc6b3aebbe12141d34b9727e11766bffdc2937e /lec07/StringBuffer.hs | |
parent | 476ae2fe83ea46e3845b0c32afe7df57c8fb109b (diff) |
add files for lecture 7's homework
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 |