]> git.rkrishnan.org Git - yorgey.git/blobdiff - hw7/StringBuffer.hs
hw7: starting materials
[yorgey.git] / hw7 / StringBuffer.hs
diff --git a/hw7/StringBuffer.hs b/hw7/StringBuffer.hs
new file mode 100644 (file)
index 0000000..138ef3f
--- /dev/null
@@ -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