-
Notifications
You must be signed in to change notification settings - Fork 20
/
Task5_2.hs
44 lines (29 loc) · 1.24 KB
/
Task5_2.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
module Task5_2 where
import Todo(todo)
-- Зиппер из лекции
data Zipper a = Zipper [a] [a]
-- Реализуйте экземпляры классов Show и Eq для этого типа
fromList :: [a] -> Zipper a
fromList lst = Zipper [] lst
goRight :: Zipper a -> Zipper a
goRight z@(Zipper _ []) = z
goRight (Zipper l (rh:rt)) = Zipper (rh:l) rt
goLeft :: Zipper a -> Zipper a
goLeft z@(Zipper [] _) = z
goLeft (Zipper (lh:lt) r) = Zipper lt (lh:r)
putRight :: a -> Zipper a -> Zipper a
putRight x (Zipper l r) = Zipper l (x:r)
putLeft :: a -> Zipper a -> Zipper a
putLeft x (Zipper l r) = Zipper (x:l) r
removeRight :: Zipper a -> Zipper a
removeRight (Zipper l (_:rt)) = Zipper l rt
removeLeft :: Zipper a -> Zipper a
removeLeft (Zipper (_:lt) r) = Zipper lt r
-- Используя приведённые выше функции, реализуйте функцию конкатенации
-- вставки подсписка в середину и выделения подсписка
concat :: Zipper a -> Zipper a -> Zipper a
concat left right = todo
insertManyAt :: Int -> Zipper a -> Zipper a -> Zipper a
insertManyAt index what into = todo
subZipper :: Int -> Int -> Zipper a -> Zipper a
subZipper from to input = todo