{-# 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"