1
1
mirror of https://github.com/sol/hpack.git synced 2024-10-04 11:47:15 +03:00

Refactoring

This commit is contained in:
Simon Hengel 2018-09-08 10:08:03 +08:00
parent 0e72731acf
commit 65db9de3bb
3 changed files with 10 additions and 17 deletions

View File

@ -40,7 +40,7 @@ instance FromValue BuildTools where
parse :: Parse ParseBuildTool DependencyVersion
parse = Parse {
parseString = buildToolFromString
, parseListItem = fmap SourceDependency . sourceDependency
, parseListItem = sourceDependency
, parseDictItem = dependencyVersion
, parseKey = nameToBuildTool
}
@ -54,10 +54,10 @@ instance FromValue BuildTools where
buildToolFromString s = parseQualifiedBuildTool s <|> parseUnqualifiedBuildTool s
parseQualifiedBuildTool :: Monad m => Text -> m (ParseBuildTool, DependencyVersion)
parseQualifiedBuildTool = fmap f . cabalParse "build tool" . T.unpack
parseQualifiedBuildTool = fmap fromCabal . cabalParse "build tool" . T.unpack
where
f :: D.ExeDependency -> (ParseBuildTool, DependencyVersion)
f (D.ExeDependency package executable version) = (
fromCabal :: D.ExeDependency -> (ParseBuildTool, DependencyVersion)
fromCabal (D.ExeDependency package executable version) = (
QualifiedBuildTool (D.unPackageName package) (D.unUnqualComponentName executable)
, VersionConstraint $ versionConstraintFromCabal version
)
@ -81,10 +81,7 @@ instance FromValue SystemBuildTools where
}
parseSystemBuildTool :: Monad m => Text -> m (String, VersionConstraint)
parseSystemBuildTool = fmap fromCabal . parseCabalBuildTool . T.unpack
parseSystemBuildTool = fmap fromCabal . cabalParse "system build tool" . T.unpack
where
fromCabal :: D.LegacyExeDependency -> (String, VersionConstraint)
fromCabal (D.LegacyExeDependency name version) = (name, versionConstraintFromCabal version)
parseCabalBuildTool :: Monad m => String -> m D.LegacyExeDependency
parseCabalBuildTool = cabalParse "system build tool"

View File

@ -9,7 +9,6 @@ module Hpack.Syntax.Dependencies (
import Data.Text (Text)
import qualified Data.Text as T
import Data.Semigroup (Semigroup(..))
import Control.Monad
import qualified Distribution.Package as D
import Data.Map.Lazy (Map)
import qualified Data.Map.Lazy as Map
@ -35,16 +34,13 @@ instance FromValue Dependencies where
parse :: Parse String DependencyVersion
parse = Parse {
parseString = parseDependency "dependency"
, parseListItem = fmap SourceDependency . sourceDependency
, parseListItem = sourceDependency
, parseDictItem = dependencyVersion
, parseKey = T.unpack
}
parseDependency :: Monad m => String -> Text -> m (String, DependencyVersion)
parseDependency subject = liftM fromCabal . parseCabalDependency subject . T.unpack
parseDependency subject = fmap fromCabal . cabalParse subject . T.unpack
where
fromCabal :: D.Dependency -> (String, DependencyVersion)
fromCabal d = (D.unPackageName $ D.depPkgName d, VersionConstraint . versionConstraintFromCabal $ D.depVerRange d)
parseCabalDependency :: Monad m => String -> String -> m D.Dependency
parseCabalDependency = cabalParse

View File

@ -71,7 +71,7 @@ instance FromValue DependencyVersion where
dependencyVersion :: Value -> Parser DependencyVersion
dependencyVersion v = case v of
Null -> return anyVersion
Object o -> SourceDependency <$> sourceDependency o
Object o -> sourceDependency o
Number n -> return (VersionConstraint $ numericVersionConstraint n)
String s -> VersionConstraint <$> stringVersionConstraint s
_ -> typeMismatch "Null, Object, Number, or String" v
@ -79,7 +79,7 @@ dependencyVersion v = case v of
data SourceDependency = GitRef GitUrl GitRef (Maybe FilePath) | Local FilePath
deriving (Eq, Show)
sourceDependency :: Object -> Parser SourceDependency
sourceDependency :: Object -> Parser DependencyVersion
sourceDependency o = let
local :: Parser SourceDependency
local = Local <$> o .: "path"
@ -99,7 +99,7 @@ sourceDependency o = let
subdir :: Parser (Maybe FilePath)
subdir = o .:? "subdir"
in local <|> git
in SourceDependency <$> (local <|> git)
numericVersionConstraint :: Scientific -> VersionConstraint
numericVersionConstraint n = VersionRange ("==" ++ version)