summaryrefslogtreecommitdiff
path: root/lec07/StringBuffer.hs
diff options
context:
space:
mode:
authorEdoardo La Greca2025-09-09 20:38:00 +0200
committerEdoardo La Greca2025-09-09 20:38:00 +0200
commitf46dafc461e4ee3fa1637051284f89b443f00a51 (patch)
treebfc6b3aebbe12141d34b9727e11766bffdc2937e /lec07/StringBuffer.hs
parent476ae2fe83ea46e3845b0c32afe7df57c8fb109b (diff)
add files for lecture 7's homework
Diffstat (limited to 'lec07/StringBuffer.hs')
-rw-r--r--lec07/StringBuffer.hs22
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