Mercurial > hg > Members > toma > Jungle-haskell
annotate Jungle.hs @ 1:98e1a35e4ab0
Rewrite almost and Modularization
author | Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 26 Mar 2013 16:24:20 +0900 |
parents | tree.hs@329f462d5dad |
children | 392c3f30c076 |
rev | line source |
---|---|
1
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1 module Jungle |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
2 ( Jungle |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
3 , Tree |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
4 , Node |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
5 , Children |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
6 , Attributes |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
7 , createJungle |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
8 , createTree |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
9 , getTreeByName |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
10 , getRootNode |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
11 , getChildren |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
12 , getAttributes |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
13 , at |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
14 , get |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
15 , addNewChildAt |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
16 , deleteChildAt |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
17 , putAttribute |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
18 , deleteAttribute |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
19 ) where |
0
329f462d5dad
add nondestructive tree structure.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
20 |
1
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
21 import qualified Data.Map as Map |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
22 import qualified Data.ByteString as B |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
23 |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
24 data Children = Children (Map.Map Int Node) deriving (Show) |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
25 data Attributes = Attributes (Map.Map String B.ByteString) deriving (Show) |
0
329f462d5dad
add nondestructive tree structure.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
26 |
329f462d5dad
add nondestructive tree structure.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
27 data Node = Empty |
1
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
28 | Node |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
29 { children :: Children |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
30 , attributes :: Attributes |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
31 } deriving (Show) |
0
329f462d5dad
add nondestructive tree structure.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
32 |
1
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
33 data Tree = Tree |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
34 { rootNode :: Node |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
35 } deriving (Show) |
0
329f462d5dad
add nondestructive tree structure.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
36 |
1
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
37 data Jungle = Jungle (Map.Map String Tree) deriving (Show) |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
38 |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
39 type Path = [Int] |
0
329f462d5dad
add nondestructive tree structure.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
40 |
1
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
41 createJungle :: Jungle |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
42 createJungle = Jungle Map.empty |
0
329f462d5dad
add nondestructive tree structure.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
43 |
1
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
44 createTree :: Jungle -> String -> Jungle |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
45 createTree (Jungle map) tree_name = Jungle (Map.insert tree_name emptyTree map) |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
46 where |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
47 emptyTree = Tree Empty |
0
329f462d5dad
add nondestructive tree structure.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
48 |
1
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
49 getTreeByName :: Jungle -> String -> Tree |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
50 getTreeByName (Jungle map) tree_name = Map.findWithDefault emptyTree tree_name map |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
51 where |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
52 emptyTree = Tree Empty |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
53 |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
54 getRootNode :: Tree -> Node |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
55 getRootNode tree = rootNode tree |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
56 |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
57 getChildren :: Node -> Children |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
58 getChildren node = children node |
0
329f462d5dad
add nondestructive tree structure.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
59 |
1
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
60 getAttributes :: Node -> Attributes |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
61 getAttributes node = attributes node |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
62 |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
63 at :: Children -> Int -> Node |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
64 at (Children map) pos = Map.findWithDefault Empty pos map |
0
329f462d5dad
add nondestructive tree structure.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
65 |
1
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
66 get :: Attributes -> String -> B.ByteString |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
67 get (Attributes map) key = Map.findWithDefault B.empty key map |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
68 |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
69 addNewChildAt :: Tree -> Path -> Int -> Node -> Tree |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
70 addNewChildAt tree path pos node = Tree $ addNewChildAt' (getRootNode tree) path pos node |
0
329f462d5dad
add nondestructive tree structure.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
71 |
1
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
72 addNewChildAt' :: Node -> Path -> Int -> Node -> Node |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
73 addNewChildAt' parent [] pos new_child = addChild parent pos new_child |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
74 addNewChildAt' parent (x:xs) pos new_child = addChild parent x (addNewChildAt' (child x) xs pos new_child) |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
75 where |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
76 child = at (getChildren parent) |
0
329f462d5dad
add nondestructive tree structure.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
77 |
1
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
78 -- RootNodeの子が消せない |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
79 -- addNewChildAtが下に付け加えることしかできないから |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
80 -- RootNodeのこの場合例外処理すればいけるけどスマートな書き方ないか考える |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
81 deleteChildAt :: Tree -> Path -> Int -> Tree |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
82 deleteChildAt tree path pos = editTree tree path (deleteChild target pos) |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
83 where |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
84 root = getRootNode tree |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
85 target = getNode root path |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
86 |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
87 addChild :: Node -> Int -> Node -> Node |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
88 addChild Empty pos child = addChild (Node (Children Map.empty) (Attributes Map.empty)) pos child |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
89 addChild (Node (Children map) attributes) pos child = Node (Children (Map.insert pos child map)) attributes |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
90 |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
91 getNode :: Node -> Path -> Node |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
92 getNode node [] = node |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
93 getNode node (x:xs) = getNode (child x) xs |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
94 where |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
95 child = at (getChildren node) |
0
329f462d5dad
add nondestructive tree structure.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
96 |
1
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
97 deleteChild :: Node -> Int -> Node |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
98 deleteChild Empty _ = Empty |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
99 deleteChild (Node (Children map) attributes) pos = Node (Children (Map.delete pos map)) attributes |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
100 |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
101 putAttribute :: Tree -> Path -> String -> B.ByteString -> Tree |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
102 putAttribute tree path key value = editTree tree path (putAttribute' target key value) |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
103 where |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
104 root = getRootNode tree |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
105 target = getNode root path |
0
329f462d5dad
add nondestructive tree structure.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
106 |
1
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
107 deleteAttribute :: Tree -> Path -> String -> Tree |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
108 deleteAttribute tree path key = editTree tree path (deleteAttribute' target key) |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
109 where |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
110 root = getRootNode tree |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
111 target = getNode root path |
0
329f462d5dad
add nondestructive tree structure.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
112 |
1
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
113 putAttribute' :: Node -> String -> B.ByteString -> Node |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
114 putAttribute' Empty key value = putAttribute' (Node (Children Map.empty) (Attributes Map.empty)) key value |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
115 putAttribute' (Node children (Attributes map)) key value = Node children (Attributes (Map.insert key value map)) |
0
329f462d5dad
add nondestructive tree structure.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
116 |
1
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
117 deleteAttribute' :: Node -> String -> Node |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
118 deleteAttribute' Empty _ = Empty |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
119 deleteAttribute' (Node children (Attributes map)) key = Node children (Attributes (Map.delete key map)) |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
120 |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
121 editTree :: Tree -> Path -> Node -> Tree |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
122 editTree _ [] node = Tree node |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
123 editTree tree path node = addNewChildAt tree (init path) (last path) node |
98e1a35e4ab0
Rewrite almost and Modularization
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
124 |