on master help sign in
Switch versionFromString to return an either
commitfc4d6288bef54571ab9b057eb06dd7b3a20f1d13 authorEvan Czaplicki <info@elm-lang.org> dateFri 25 Sep 2015, 14:42 (11 years ago) parentcbbbf51
1 file changed+24−20
src/Elm/Package.hs+24−20
src/Elm/Package.hs+24−20
@@ -164,26 +164,28 @@ versionToString (Version major minor patch) =
164164 show major ++ "." ++ show minor ++ "." ++ show patch
165165
166166
167−versionFromString :: String -> Maybe Version
167+versionFromString :: String -> Either String Version
168168versionFromString string =
169− case splitNumbers string of
170− Just [major, minor, patch] ->
171− Just (Version major minor patch)
172− _ -> Nothing
173− where
174− splitNumbers :: String -> Maybe [Int]
175− splitNumbers ns =
176− case span Char.isDigit ns of
177− ("", _) ->
178− Nothing
169+ case splitNumbers string of
170+ Just [major, minor, patch] ->
171+ Right (Version major minor patch)
172+ _ ->
173+ Left "Must have format MAJOR.MINOR.PATCH (e.g. 1.0.2)"
174+ where
175+ splitNumbers :: String -> Maybe [Int]
176+ splitNumbers ns =
177+ case span Char.isDigit ns of
178+ ("", _) ->
179+ Nothing
179180
180− (numbers, []) ->
181− Just [ read numbers ]
181+ (numbers, []) ->
182+ Just [ read numbers ]
182183
183− (numbers, '.':rest) ->
184− (read numbers :) <$> splitNumbers rest
184+ (numbers, '.':rest) ->
185+ (read numbers :) <$> splitNumbers rest
185186
186− _ -> Nothing
187+ _ ->
188+ Nothing
187189
188190
189191instance Binary Version where
@@ -198,11 +200,13 @@ instance FromJSON Version where
198200 parseJSON (String text) =
199201 let string = T.unpack text in
200202 case versionFromString string of
201− Just v -> return v
202− Nothing ->
203+ Right v ->
204+ return v
205+
206+ Left problem ->
203207 fail $ unlines
204− [ "Dependency file has an invalid version number: " ++ string
205− , "Must have format MAJOR.MINOR.PATCH (e.g. 0.1.2)"
208+ [ "Ran into an invalid version number: " ++ string
209+ , problem
206210 ]
207211
208212 parseJSON _ =