extra-1.8.1: src/Data/Version/Extra.hs
{-# LANGUAGE ConstraintKinds #-}
-- | This module extends "Data.Version" with extra utilities.
-- The package also exports the existing "Data.Version" functions.
module Data.Version.Extra(
module Data.Version,
readVersion
) where
import Partial
import Data.Version
import Data.List.Extra
import Text.ParserCombinators.ReadP
-- | Read a 'Version' or throw an exception.
--
-- > \x -> readVersion (showVersion x) == x
-- > readVersion "hello" == undefined
readVersion :: Partial => String -> Version
readVersion s =
case [ x | (x,"") <- readP_to_S parseVersion $ trimEnd s] of
[x] -> x
[] -> error "Data.Version.Extra.readVersion: no parse"
_ -> error "Data.Version.Extra.readVersion: ambiguous parse"