|
4 | 4 | {-# OPTIONS_GHC -Wno-unused-top-binds #-} |
5 | 5 | module Nix.String |
6 | 6 | ( NixString |
7 | | - , principledGetContext |
8 | | - , principledMakeNixString |
9 | | - , principledMempty |
| 7 | + , getContext |
| 8 | + , makeNixString |
10 | 9 | , StringContext(..) |
11 | 10 | , ContextFlavor(..) |
12 | 11 | , NixLikeContext(..) |
13 | 12 | , NixLikeContextValue(..) |
14 | 13 | , toNixLikeContext |
15 | 14 | , fromNixLikeContext |
16 | 15 | , stringHasContext |
17 | | - , principledIntercalateNixString |
18 | | - , principledGetStringNoContext |
19 | | - , principledStringIgnoreContext |
20 | | - , principledMakeNixStringWithoutContext |
21 | | - , principledMakeNixStringWithSingletonContext |
22 | | - , principledModifyNixContents |
23 | | - , principledStringMappend |
24 | | - , principledStringMempty |
25 | | - , principledStringMConcat |
| 16 | + , intercalateNixString |
| 17 | + , getStringNoContext |
| 18 | + , stringIgnoreContext |
| 19 | + , makeNixStringWithoutContext |
| 20 | + , makeNixStringWithSingletonContext |
| 21 | + , modifyNixContents |
| 22 | + , stringMConcat |
26 | 23 | , WithStringContext |
27 | 24 | , WithStringContextT(..) |
28 | 25 | , extractNixString |
@@ -69,6 +66,12 @@ data NixString = NixString |
69 | 66 | , nsContext :: !(S.HashSet StringContext) |
70 | 67 | } deriving (Eq, Ord, Show, Generic) |
71 | 68 |
|
| 69 | +instance Semigroup NixString where |
| 70 | + NixString s1 t1 <> NixString s2 t2 = NixString (s1 <> s2) (t1 <> t2) |
| 71 | + |
| 72 | +instance Monoid NixString where |
| 73 | + mempty = NixString mempty mempty |
| 74 | + |
72 | 75 | instance Hashable NixString |
73 | 76 |
|
74 | 77 | newtype NixLikeContext = NixLikeContext |
@@ -118,72 +121,52 @@ fromNixLikeContext :: NixLikeContext -> S.HashSet StringContext |
118 | 121 | fromNixLikeContext = |
119 | 122 | S.fromList . join . map toStringContexts . M.toList . getNixLikeContext |
120 | 123 |
|
121 | | -principledGetContext :: NixString -> S.HashSet StringContext |
122 | | -principledGetContext = nsContext |
123 | | - |
124 | | --- | Combine two NixStrings using mappend |
125 | | -principledMempty :: NixString |
126 | | -principledMempty = NixString "" mempty |
127 | | - |
128 | | --- | Combine two NixStrings using mappend |
129 | | -principledStringMappend :: NixString -> NixString -> NixString |
130 | | -principledStringMappend (NixString s1 t1) (NixString s2 t2) = |
131 | | - NixString (s1 <> s2) (t1 <> t2) |
| 124 | +getContext :: NixString -> S.HashSet StringContext |
| 125 | +getContext = nsContext |
132 | 126 |
|
133 | 127 | -- | Combine NixStrings with a separator |
134 | | -principledIntercalateNixString :: NixString -> [NixString] -> NixString |
135 | | -principledIntercalateNixString _ [] = principledMempty |
136 | | -principledIntercalateNixString _ [ns] = ns |
137 | | -principledIntercalateNixString sep nss = NixString contents ctx |
| 128 | +intercalateNixString :: NixString -> [NixString] -> NixString |
| 129 | +intercalateNixString _ [] = mempty |
| 130 | +intercalateNixString _ [ns] = ns |
| 131 | +intercalateNixString sep nss = NixString contents ctx |
138 | 132 | where |
139 | 133 | contents = Text.intercalate (nsContents sep) (map nsContents nss) |
140 | 134 | ctx = S.unions (nsContext sep : map nsContext nss) |
141 | 135 |
|
142 | | --- | Empty string with empty context. |
143 | | -principledStringMempty :: NixString |
144 | | -principledStringMempty = NixString mempty mempty |
145 | | - |
146 | 136 | -- | Combine NixStrings using mconcat |
147 | | -principledStringMConcat :: [NixString] -> NixString |
148 | | -principledStringMConcat = |
149 | | - foldr principledStringMappend (NixString mempty mempty) |
150 | | - |
151 | | ---instance Semigroup NixString where |
152 | | - --NixString s1 t1 <> NixString s2 t2 = NixString (s1 <> s2) (t1 <> t2) |
153 | | - |
154 | | ---instance Monoid NixString where |
155 | | --- mempty = NixString mempty mempty |
156 | | --- mappend = (<>) |
| 137 | +stringMConcat :: [NixString] -> NixString |
| 138 | +stringMConcat = |
| 139 | + foldr mappend (NixString mempty mempty) |
157 | 140 |
|
158 | 141 | -- | Extract the string contents from a NixString that has no context |
159 | | -principledGetStringNoContext :: NixString -> Maybe Text |
160 | | -principledGetStringNoContext (NixString s c) | null c = Just s |
| 142 | +getStringNoContext :: NixString -> Maybe Text |
| 143 | +getStringNoContext (NixString s c) | null c = Just s |
161 | 144 | | otherwise = Nothing |
162 | 145 |
|
163 | 146 | -- | Extract the string contents from a NixString even if the NixString has an associated context |
164 | | -principledStringIgnoreContext :: NixString -> Text |
165 | | -principledStringIgnoreContext (NixString s _) = s |
| 147 | +stringIgnoreContext :: NixString -> Text |
| 148 | +stringIgnoreContext (NixString s _) = s |
166 | 149 |
|
167 | 150 | -- | Returns True if the NixString has an associated context |
168 | 151 | stringHasContext :: NixString -> Bool |
169 | 152 | stringHasContext (NixString _ c) = not (null c) |
170 | 153 |
|
171 | 154 | -- | Constructs a NixString without a context |
172 | | -principledMakeNixStringWithoutContext :: Text -> NixString |
173 | | -principledMakeNixStringWithoutContext = flip NixString mempty |
| 155 | +makeNixStringWithoutContext :: Text -> NixString |
| 156 | +makeNixStringWithoutContext = flip NixString mempty |
174 | 157 |
|
175 | 158 | -- | Modify the string part of the NixString, leaving the context unchanged |
176 | | -principledModifyNixContents :: (Text -> Text) -> NixString -> NixString |
177 | | -principledModifyNixContents f (NixString s c) = NixString (f s) c |
| 159 | +modifyNixContents :: (Text -> Text) -> NixString -> NixString |
| 160 | +modifyNixContents f (NixString s c) = NixString (f s) c |
178 | 161 |
|
179 | 162 | -- | Create a NixString using a singleton context |
180 | | -principledMakeNixStringWithSingletonContext |
| 163 | +makeNixStringWithSingletonContext |
181 | 164 | :: Text -> StringContext -> NixString |
182 | | -principledMakeNixStringWithSingletonContext s c = NixString s (S.singleton c) |
| 165 | +makeNixStringWithSingletonContext s c = NixString s (S.singleton c) |
183 | 166 |
|
184 | 167 | -- | Create a NixString from a Text and context |
185 | | -principledMakeNixString :: Text -> S.HashSet StringContext -> NixString |
186 | | -principledMakeNixString = NixString |
| 168 | +makeNixString :: Text -> S.HashSet StringContext -> NixString |
| 169 | +makeNixString = NixString |
187 | 170 |
|
188 | 171 | -- | A monad for accumulating string context while producing a result string. |
189 | 172 | newtype WithStringContextT m a = WithStringContextT (WriterT (S.HashSet StringContext) m a) |
@@ -232,21 +215,21 @@ runWithStringContext' = runIdentity . runWithStringContextT' |
232 | 215 |
|
233 | 216 | -- | Combine two NixStrings using mappend |
234 | 217 | hackyStringMappend :: NixString -> NixString -> NixString |
235 | | -hackyStringMappend = principledStringMappend |
| 218 | +hackyStringMappend = mappend |
236 | 219 |
|
237 | 220 | -- | Combine NixStrings using mconcat |
238 | 221 | hackyStringMConcat :: [NixString] -> NixString |
239 | | -hackyStringMConcat = principledStringMConcat |
| 222 | +hackyStringMConcat = stringMConcat |
240 | 223 |
|
241 | 224 | -- | Constructs a NixString without a context |
242 | 225 | hackyMakeNixStringWithoutContext :: Text -> NixString |
243 | | -hackyMakeNixStringWithoutContext = principledMakeNixStringWithoutContext |
| 226 | +hackyMakeNixStringWithoutContext = makeNixStringWithoutContext |
244 | 227 |
|
245 | 228 | -- | Extract the string contents from a NixString even if the NixString has an associated context |
246 | 229 | hackyStringIgnoreContext :: NixString -> Text |
247 | | -hackyStringIgnoreContext = principledStringIgnoreContext |
| 230 | +hackyStringIgnoreContext = stringIgnoreContext |
248 | 231 |
|
249 | 232 | -- | Extract the string contents from a NixString that has no context |
250 | 233 | hackyGetStringNoContext :: NixString -> Maybe Text |
251 | | -hackyGetStringNoContext = principledGetStringNoContext |
| 234 | +hackyGetStringNoContext = getStringNoContext |
252 | 235 |
|
0 commit comments