on master help sign in
Switch versionFromString to return an either
fc4d628Evan Czaplicki
src/Elm/Package.hs+24−20
@@ -164,26 +164,28 @@ versionToString (Version major minor patch) =
164 show major ++ "." ++ show minor ++ "." ++ show patch
164 show major ++ "." ++ show minor ++ "." ++ show patch
165
165
166
166
167−versionFromString :: String -> Maybe Version
167+versionFromString :: String -> Either String Version
168versionFromString string =
168versionFromString string =
169− case splitNumbers string of
169+ case splitNumbers string of
170− Just [major, minor, patch] ->
170+ Just [major, minor, patch] ->
171− Just (Version major minor patch)
171+ Right (Version major minor patch)
172− _ -> Nothing
172+ _ ->
173+ Left "Must have format MAJOR.MINOR.PATCH (e.g. 1.0.2)"
173− where
174+ where
174− splitNumbers :: String -> Maybe [Int]
175+ splitNumbers :: String -> Maybe [Int]
175− splitNumbers ns =
176+ splitNumbers ns =
176− case span Char.isDigit ns of
177+ case span Char.isDigit ns of
177− ("", _) ->
178+ ("", _) ->
178− Nothing
179+ Nothing
179
180
180− (numbers, []) ->
181+ (numbers, []) ->
181− Just [ read numbers ]
182+ Just [ read numbers ]
182
183
183− (numbers, '.':rest) ->
184+ (numbers, '.':rest) ->
184− (read numbers :) <$> splitNumbers rest
185+ (read numbers :) <$> splitNumbers rest
185
186
187+ _ ->
186− _ -> Nothing
188+ Nothing
187
189
188
190
189instance Binary Version where
191instance Binary Version where
@@ -198,11 +200,13 @@ instance FromJSON Version where
198 parseJSON (String text) =
200 parseJSON (String text) =
199 let string = T.unpack text in
201 let string = T.unpack text in
200 case versionFromString string of
202 case versionFromString string of
203+ Right v ->
201− Just v -> return v
204+ return v
202− Nothing ->
205+
206+ Left problem ->
203 fail $ unlines
207 fail $ unlines
204− [ "Dependency file has an invalid version number: " ++ string
208+ [ "Ran into an invalid version number: " ++ string
205− , "Must have format MAJOR.MINOR.PATCH (e.g. 0.1.2)"
209+ , problem
206 ]
210 ]
207
211
208 parseJSON _ =
212 parseJSON _ =