|
38 | 38 | <span class="lineno"> 19 </span><span class="decl"><span class="nottickedoff">mapListEmpty = mapListFromList []</span></span>
|
39 | 39 | <span class="lineno"> 20 </span>
|
40 | 40 | <span class="lineno"> 21 </span>mapListFromList :: [a] -> MapList a
|
41 |
| -<span class="lineno"> 22 </span><span class="decl"><span class="istickedoff">mapListFromList = fromIndexedList . List.indexed</span></span> |
| 41 | +<span class="lineno"> 22 </span><span class="decl"><span class="istickedoff">mapListFromList = fromIndexedList <$> List.indexed</span></span> |
42 | 42 | <span class="lineno"> 23 </span>
|
43 | 43 | <span class="lineno"> 24 </span>fromIndexedList :: IndexedList a -> MapList a
|
44 |
| -<span class="lineno"> 25 </span><span class="decl"><span class="istickedoff">fromIndexedList = fromIntMap . IntMap.fromList</span></span> |
| 44 | +<span class="lineno"> 25 </span><span class="decl"><span class="istickedoff">fromIndexedList = fromIntMap <$> IntMap.fromList</span></span> |
45 | 45 | <span class="lineno"> 26 </span>
|
46 | 46 | <span class="lineno"> 27 </span>fromIntMap :: IntMap a -> MapList a
|
47 | 47 | <span class="lineno"> 28 </span><span class="decl"><span class="istickedoff">fromIntMap = MapList</span></span>
|
48 | 48 | <span class="lineno"> 29 </span>
|
49 | 49 | <span class="lineno"> 30 </span>-- | DeConstruction
|
50 | 50 | <span class="lineno"> 31 </span>mapListToList :: Default a => MapList a -> [a]
|
51 |
| -<span class="lineno"> 32 </span><span class="decl"><span class="istickedoff">mapListToList = listFromDescList . toDescList</span></span> |
| 51 | +<span class="lineno"> 32 </span><span class="decl"><span class="istickedoff">mapListToList = listFromDescList <$> toDescList</span></span> |
52 | 52 | <span class="lineno"> 33 </span>
|
53 | 53 | <span class="lineno"> 34 </span>toDescList :: MapList a -> IndexedList a
|
54 |
| -<span class="lineno"> 35 </span><span class="decl"><span class="istickedoff">toDescList = IntMap.toDescList . unMapList</span></span> |
| 54 | +<span class="lineno"> 35 </span><span class="decl"><span class="istickedoff">toDescList = IntMap.toDescList <$> unMapList</span></span> |
55 | 55 | <span class="lineno"> 36 </span>
|
56 | 56 | <span class="lineno"> 37 </span>-- | Internal function
|
57 | 57 | <span class="lineno"> 38 </span>listFromDescList :: Default a => IndexedList a -> [a]
|
58 |
| -<span class="lineno"> 39 </span><span class="decl"><span class="istickedoff">listFromDescList = loop act . ([] , ) where</span> |
| 58 | +<span class="lineno"> 39 </span><span class="decl"><span class="istickedoff">listFromDescList = loop act <$> ([] , ) where</span> |
59 | 59 | <span class="lineno"> 40 </span><span class="spaces"> </span><span class="istickedoff">act :: Default a => AccWithIndexedList a -> Either (AccWithIndexedList a) [a]</span>
|
60 | 60 | <span class="lineno"> 41 </span><span class="spaces"> </span><span class="istickedoff">act (acc , [] ) = <span class="nottickedoff">Right acc</span></span>
|
61 | 61 | <span class="lineno"> 42 </span><span class="spaces"> </span><span class="istickedoff">act (acc , [(i , v)] ) = Right $ consDef i $ v : acc</span>
|
62 | 62 | <span class="lineno"> 43 </span><span class="spaces"> </span><span class="istickedoff">act (acc , (i1 , v1) : (i2 , v2) : l ) = Left (consDef (i1 - i2 - 1) $ v1 : acc , (i2 , v2) : l)</span></span>
|
63 | 63 | <span class="lineno"> 44 </span>
|
64 | 64 | <span class="lineno"> 45 </span>consDef :: Default a => Key -> [a] -> [a]
|
65 |
| -<span class="lineno"> 46 </span><span class="decl"><span class="istickedoff">consDef i l = (check . compare i) 0 where</span> |
| 65 | +<span class="lineno"> 46 </span><span class="decl"><span class="istickedoff">consDef i l = (check <$> compare i) 0 where</span> |
66 | 66 | <span class="lineno"> 47 </span><span class="spaces"> </span><span class="istickedoff">check LT = <span class="nottickedoff">error "MapList.consDef index is negative"</span></span>
|
67 | 67 | <span class="lineno"> 48 </span><span class="spaces"> </span><span class="istickedoff">check EQ = l</span>
|
68 | 68 | <span class="lineno"> 49 </span><span class="spaces"> </span><span class="istickedoff">check GT = consDef (i - 1) (def : l)</span></span>
|
|
79 | 79 | <span class="lineno"> 60 </span>
|
80 | 80 | <span class="lineno"> 61 </span>-- | Standard instances
|
81 | 81 | <span class="lineno"> 62 </span>instance (Default a , Show a) => Show (MapList a) where
|
82 |
| -<span class="lineno"> 63 </span> <span class="decl"><span class="nottickedoff">show = show . I.toList</span></span> |
| 82 | +<span class="lineno"> 63 </span> <span class="decl"><span class="nottickedoff">show = show <$> I.toList</span></span> |
83 | 83 | <span class="lineno"> 64 </span>
|
84 | 84 | <span class="lineno"> 65 </span>instance IsString MapString where
|
85 | 85 | <span class="lineno"> 66 </span> <span class="decl"><span class="nottickedoff">fromString = mapListFromList</span></span>
|
|
88 | 88 | <span class="lineno"> 69 </span> type (Item (MapList a)) = a
|
89 | 89 | <span class="lineno"> 70 </span> <span class="decl"><span class="istickedoff">toList = mapListToList</span></span>
|
90 | 90 | <span class="lineno"> 71 </span> <span class="decl"><span class="istickedoff">fromList = mapListFromList</span></span>
|
91 |
| -<span class="lineno"> 72 </span> <span class="decl"><span class="nottickedoff">fromListN n = mapListFromList . fromListN n</span></span> |
| 91 | +<span class="lineno"> 72 </span> <span class="decl"><span class="nottickedoff">fromListN n = mapListFromList <$> fromListN n</span></span> |
92 | 92 | <span class="lineno"> 73 </span>
|
93 | 93 | <span class="lineno"> 74 </span>-- | ListLike instances
|
94 | 94 | <span class="lineno"> 75 </span>instance Default a => LL.FoldableLL (MapList a) a where
|
95 |
| -<span class="lineno"> 76 </span> <span class="decl"><span class="nottickedoff">foldl f b = IntMap.foldl f b . unMapList</span></span> |
96 |
| -<span class="lineno"> 77 </span> <span class="decl"><span class="nottickedoff">foldr f b = IntMap.foldr f b . unMapList</span></span> |
| 95 | +<span class="lineno"> 76 </span> <span class="decl"><span class="nottickedoff">foldl f b = IntMap.foldl f b <$> unMapList</span></span> |
| 96 | +<span class="lineno"> 77 </span> <span class="decl"><span class="nottickedoff">foldr f b = IntMap.foldr f b <$> unMapList</span></span> |
97 | 97 | <span class="lineno"> 78 </span>
|
98 | 98 | <span class="lineno"> 79 </span>-- | My instances
|
99 | 99 | <span class="lineno"> 80 </span>instance {-# OVERLAPPING #-} IndexSafe (MapList a) a where
|
100 |
| -<span class="lineno"> 81 </span> <span class="decl"><span class="nottickedoff">findWithDefault e i = IntMap.findWithDefault e i . unMapList</span></span> |
| 100 | +<span class="lineno"> 81 </span> <span class="decl"><span class="nottickedoff">findWithDefault e i = IntMap.findWithDefault e i <$> unMapList</span></span> |
101 | 101 | <span class="lineno"> 82 </span> <span class="decl"><span class="nottickedoff">findMaybe = mapListFindMaybe</span></span>
|
102 | 102 | <span class="lineno"> 83 </span> <span class="decl"><span class="nottickedoff">indexMaybe = mapListIndexMaybe</span></span>
|
103 |
| -<span class="lineno"> 84 </span> <span class="decl"><span class="nottickedoff">findSafe i = liftMaybeOrError "MapList.findSafe: index is not correct" . mapListFindMaybe i</span></span> |
104 |
| -<span class="lineno"> 85 </span> <span class="decl"><span class="nottickedoff">indexSafe l = liftMaybeOrError "MapList.LLIndexSafe: index is not correct" . mapListIndexMaybe l</span></span> |
| 103 | +<span class="lineno"> 84 </span> <span class="decl"><span class="nottickedoff">findSafe i = liftMaybeOrError "MapList.findSafe: index is not correct" <$> mapListFindMaybe i</span></span> |
| 104 | +<span class="lineno"> 85 </span> <span class="decl"><span class="nottickedoff">indexSafe l = liftMaybeOrError "MapList.LLIndexSafe: index is not correct" <$> mapListIndexMaybe l</span></span> |
105 | 105 | <span class="lineno"> 86 </span>
|
106 | 106 | <span class="lineno"> 87 </span>instance InsertDef (MapList a) a where
|
107 |
| -<span class="lineno"> 88 </span> <span class="decl"><span class="nottickedoff">insertDef i e = fromIntMap . IntMap.insert i e . unMapList</span></span> |
| 107 | +<span class="lineno"> 88 </span> <span class="decl"><span class="nottickedoff">insertDef i e = fromIntMap <$> IntMap.insert i e <$> unMapList</span></span> |
108 | 108 | <span class="lineno"> 89 </span>
|
109 | 109 | <span class="lineno"> 90 </span>-- | Internal functions
|
110 | 110 | <span class="lineno"> 91 </span>mapListFindMaybe :: Key -> MapList a -> Maybe a
|
111 |
| -<span class="lineno"> 92 </span><span class="decl"><span class="nottickedoff">mapListFindMaybe i = IntMap.lookup i . unMapList</span></span> |
| 111 | +<span class="lineno"> 92 </span><span class="decl"><span class="nottickedoff">mapListFindMaybe i = IntMap.lookup i <$> unMapList</span></span> |
112 | 112 | <span class="lineno"> 93 </span>
|
113 | 113 | <span class="lineno"> 94 </span>mapListIndexMaybe :: MapList a -> Key -> Maybe a
|
114 | 114 | <span class="lineno"> 95 </span><span class="decl"><span class="nottickedoff">mapListIndexMaybe l i = unMapList l IntMap.!? i</span></span>
|
|
0 commit comments