| Safe Haskell | Safe-Inferred |
|---|---|
| Language | Haskell2010 |
Futhark.Pkg.Types
Description
Types (and a few other simple definitions) for futhark-pkg.
Synopsis
- type PkgPath = Text
- pkgPathFilePath :: PkgPath -> FilePath
- newtype PkgRevDeps = PkgRevDeps (Map PkgPath (SemVer, Maybe Text))
- prettySemVer :: SemVer -> Text
- data SemVer = SemVer {}
- data VUnit
- commitVersion :: Text -> Text -> SemVer
- isCommitVersion :: SemVer -> Maybe Text
- parseVersion :: Text -> Either (ParseErrorBundle Text Void) SemVer
- data PkgManifest = PkgManifest {}
- newPkgManifest :: Maybe PkgPath -> PkgManifest
- pkgRevDeps :: PkgManifest -> PkgRevDeps
- pkgDir :: PkgManifest -> Maybe FilePath
- addRequiredToManifest :: Required -> PkgManifest -> (PkgManifest, Maybe Required)
- removeRequiredFromManifest :: PkgPath -> PkgManifest -> Maybe (PkgManifest, Required)
- prettyPkgManifest :: PkgManifest -> Text
- type Comment = Text
- data Commented a = Commented {}
- data Required = Required {}
- futharkPkg :: FilePath
- parsePkgManifest :: FilePath -> Text -> Either (ParseErrorBundle Text Void) PkgManifest
- parsePkgManifestFromFile :: FilePath -> IO PkgManifest
- errorBundlePretty :: (VisualStream s, TraversableStream s, ShowErrorComponent e) => ParseErrorBundle s e -> String
- newtype BuildList = BuildList {}
- prettyBuildList :: BuildList -> Text
Documentation
A package path is a unique identifier for a package, for example
github.comuserfoo.
pkgPathFilePath :: PkgPath -> FilePath Source #
Turn a package path (which always uses forward slashes) into a file path in the local file system (which might use different slashes).
newtype PkgRevDeps Source #
The dependencies of a (revision of a) package is a mapping from package paths to minimum versions (and an optional hash pinning).
Instances
| Monoid PkgRevDeps Source # | |
Defined in Futhark.Pkg.Types Methods mempty :: PkgRevDeps # mappend :: PkgRevDeps -> PkgRevDeps -> PkgRevDeps # mconcat :: [PkgRevDeps] -> PkgRevDeps # | |
| Semigroup PkgRevDeps Source # | |
Defined in Futhark.Pkg.Types Methods (<>) :: PkgRevDeps -> PkgRevDeps -> PkgRevDeps # sconcat :: NonEmpty PkgRevDeps -> PkgRevDeps # stimes :: Integral b => b -> PkgRevDeps -> PkgRevDeps # | |
| Show PkgRevDeps Source # | |
Defined in Futhark.Pkg.Types Methods showsPrec :: Int -> PkgRevDeps -> ShowS # show :: PkgRevDeps -> String # showList :: [PkgRevDeps] -> ShowS # | |
prettySemVer :: SemVer -> Text #
Convert a SemVer back to its textual representation.
An (Ideal) version number that conforms to Semantic Versioning. This is a prescriptive parser, meaning it follows the SemVer standard.
Legal semvers are of the form: MAJOR.MINOR.PATCH-PREREL+META
Example: 1.2.3-r1+commithash
Extra Rules:
- Pre-release versions have lower precedence than normal versions.
- Build metadata does not affect version precedence.
- PREREL and META strings may only contain ASCII alphanumerics and hyphens.
For more information, see http://semver.org
Constructors
| SemVer | |
Instances
A single unit of a Version. May be digits or a string of characters. Groups
of these are called VChunks, and are the identifiers separated by periods
in the source.
Instances
| Monoid VUnit | |
| Semigroup VUnit | |
| Generic VUnit | |
| Read VUnit | |
| Show VUnit | |
| NFData VUnit | |
Defined in Data.Versions | |
| Eq VUnit | |
| Ord VUnit | |
| Hashable VUnit | |
Defined in Data.Versions | |
| type Rep VUnit | |
Defined in Data.Versions type Rep VUnit = D1 ('MetaData "VUnit" "Data.Versions" "versions-5.0.3-8498d1a709fd8caf9685005bee48558881753bc3f616ea63778466aac8b58cb9" 'False) (C1 ('MetaCons "Digits" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Word)) :+: C1 ('MetaCons "Str" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text))) | |
Versions
commitVersion :: Text -> Text -> SemVer Source #
commitVersion timestamp commit constructs a commit version.
isCommitVersion :: SemVer -> Maybe Text Source #
Versions of the form (0,0,0)-timestamp+hash are treated
specially, as a reference to the commit identified uniquely with
hash (typically the Git commit ID). This function detects such
versions.
parseVersion :: Text -> Either (ParseErrorBundle Text Void) SemVer Source #
Unfortunately, Data.Versions has a buggy semver parser that collapses consecutive zeroes in the metadata field. So, we define our own parser here. It's a little simpler too, since we don't need full semver.
Package manifests
data PkgManifest Source #
A structure corresponding to a futhark.pkg file, including
comments. It is an invariant that duplicate required packages do
not occcur (the parser will verify this).
Constructors
| PkgManifest | |
Fields
| |
Instances
| Show PkgManifest Source # | |
Defined in Futhark.Pkg.Types Methods showsPrec :: Int -> PkgManifest -> ShowS # show :: PkgManifest -> String # showList :: [PkgManifest] -> ShowS # | |
| Eq PkgManifest Source # | |
Defined in Futhark.Pkg.Types | |
newPkgManifest :: Maybe PkgPath -> PkgManifest Source #
Possibly given a package path, construct an otherwise-empty manifest file.
pkgRevDeps :: PkgManifest -> PkgRevDeps Source #
The required packages listed in a package manifest.
pkgDir :: PkgManifest -> Maybe FilePath Source #
Where in the corresponding repository archive we can expect to find the package files.
addRequiredToManifest :: Required -> PkgManifest -> (PkgManifest, Maybe Required) Source #
Add new required package to the package manifest. If the package was already present, return the old version.
removeRequiredFromManifest :: PkgPath -> PkgManifest -> Maybe (PkgManifest, Required) Source #
prettyPkgManifest :: PkgManifest -> Text Source #
Prettyprint a package manifest such that it can be written to a
futhark.pkg file.
Wraps a value with an annotation of preceding line comments.
This is important to our goal of being able to programmatically
modify the futhark.pkg file while keeping comments intact.
Instances
| Foldable Commented Source # | |
Defined in Futhark.Pkg.Types Methods fold :: Monoid m => Commented m -> m # foldMap :: Monoid m => (a -> m) -> Commented a -> m # foldMap' :: Monoid m => (a -> m) -> Commented a -> m # foldr :: (a -> b -> b) -> b -> Commented a -> b # foldr' :: (a -> b -> b) -> b -> Commented a -> b # foldl :: (b -> a -> b) -> b -> Commented a -> b # foldl' :: (b -> a -> b) -> b -> Commented a -> b # foldr1 :: (a -> a -> a) -> Commented a -> a # foldl1 :: (a -> a -> a) -> Commented a -> a # toList :: Commented a -> [a] # length :: Commented a -> Int # elem :: Eq a => a -> Commented a -> Bool # maximum :: Ord a => Commented a -> a # minimum :: Ord a => Commented a -> a # | |
| Traversable Commented Source # | |
Defined in Futhark.Pkg.Types | |
| Functor Commented Source # | |
| Show a => Show (Commented a) Source # | |
| Eq a => Eq (Commented a) Source # | |
An entry in the required section of a futhark.pkg file.
Constructors
| Required | |
Fields
| |
Instances
futharkPkg :: FilePath Source #
The name of the file containing the futhark-pkg manifest.
Parsing package manifests
parsePkgManifest :: FilePath -> Text -> Either (ParseErrorBundle Text Void) PkgManifest Source #
Parse a pretty as a PkgManifest. The FilePath is used for any error messages.
parsePkgManifestFromFile :: FilePath -> IO PkgManifest Source #
Read contents of file and pass it to parsePkgManifest.
Arguments
| :: (VisualStream s, TraversableStream s, ShowErrorComponent e) | |
| => ParseErrorBundle s e | Parse error bundle to display |
| -> String | Textual rendition of the bundle |
Pretty-print a ParseErrorBundle. All ParseErrors in the bundle will
be pretty-printed in order together with the corresponding offending
lines by doing a single pass over the input stream. The rendered String
always ends with a newline.
Since: megaparsec-7.0.0
Build list
A mapping from package paths to their chosen revisions. This is the result of the version solver.
Constructors
| BuildList | |
Fields | |
prettyBuildList :: BuildList -> Text Source #
Prettyprint a build list; one package per line and newline-terminated.