hpio 0.9.0.2 → 0.9.0.3
raw patch · 20 files changed
+286/−125 lines, 20 filesdep ~QuickCheckdep ~hlintPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: QuickCheck, hlint
API changes (from Hackage documentation)
- System.GPIO.Linux.Sysfs.IO: instance Control.Monad.RWS.Class.MonadRWS r w s m => Control.Monad.RWS.Class.MonadRWS r w s (System.GPIO.Linux.Sysfs.IO.SysfsIOT m)
- System.GPIO.Linux.Sysfs.Monad: instance Control.Monad.RWS.Class.MonadRWS r w s m => Control.Monad.RWS.Class.MonadRWS r w s (System.GPIO.Linux.Sysfs.Monad.SysfsGpioT m)
+ System.GPIO.Linux.Sysfs.IO: instance (Control.Monad.State.Class.MonadState s m, Control.Monad.Writer.Class.MonadWriter w m, Control.Monad.Reader.Class.MonadReader r m) => Control.Monad.RWS.Class.MonadRWS r w s (System.GPIO.Linux.Sysfs.IO.SysfsIOT m)
+ System.GPIO.Linux.Sysfs.Monad: instance (Control.Monad.State.Class.MonadState s m, Control.Monad.Writer.Class.MonadWriter w m, Control.Monad.Reader.Class.MonadReader r m) => Control.Monad.RWS.Class.MonadRWS r w s (System.GPIO.Linux.Sysfs.Monad.SysfsGpioT m)
- System.GPIO.Linux.Sysfs: class (Monad m) => MonadSysfs m where doesDirectoryExist = lift . doesDirectoryExist doesFileExist = lift . doesFileExist getDirectoryContents = lift . getDirectoryContents readFile = lift . readFile writeFile fn bs = lift $ writeFile fn bs unlockedWriteFile fn bs = lift $ unlockedWriteFile fn bs pollFile fn timeout = lift $ pollFile fn timeout
+ System.GPIO.Linux.Sysfs: class (Monad m) => MonadSysfs m
- System.GPIO.Linux.Sysfs.Monad: class (Monad m) => MonadSysfs m where doesDirectoryExist = lift . doesDirectoryExist doesFileExist = lift . doesFileExist getDirectoryContents = lift . getDirectoryContents readFile = lift . readFile writeFile fn bs = lift $ writeFile fn bs unlockedWriteFile fn bs = lift $ unlockedWriteFile fn bs pollFile fn timeout = lift $ pollFile fn timeout
+ System.GPIO.Linux.Sysfs.Monad: class (Monad m) => MonadSysfs m
- System.GPIO.Monad: class Monad m => MonadGpio h m | m -> h where pins = lift pins pinCapabilities = lift . pinCapabilities openPin = lift . openPin closePin = lift . closePin getPinDirection = lift . getPinDirection getPinInputMode = lift . getPinInputMode setPinInputMode h mode = lift $ setPinInputMode h mode getPinOutputMode = lift . getPinOutputMode setPinOutputMode h mode v = lift $ setPinOutputMode h mode v readPin = lift . readPin pollPin = lift . readPin pollPinTimeout h timeout = lift $ pollPinTimeout h timeout writePin h v = lift $ writePin h v togglePin = lift . togglePin getPinInterruptMode = lift . getPinInterruptMode setPinInterruptMode h mode = lift $ setPinInterruptMode h mode getPinActiveLevel = lift . getPinActiveLevel setPinActiveLevel h v = lift $ setPinActiveLevel h v togglePinActiveLevel = lift . togglePinActiveLevel
+ System.GPIO.Monad: class Monad m => MonadGpio h m | m -> h
Files
- .travis.yml +7/−0
- changelog.md +12/−0
- default.nix +11/−0
- hpio.cabal +16/−6
- nix/fetch-nixpkgs.nix +25/−0
- nix/hpio.nix +0/−29
- nix/jobsets/default.nix +63/−0
- nix/jobsets/release.nix +28/−0
- nix/jobsets/spec.json +16/−0
- nix/lib.nix +23/−0
- nix/nixpkgs-src.json +6/−0
- nix/overlays/haskell-overrides.nix +15/−0
- nix/pkgs/hpio.nix +29/−0
- package.yaml +6/−6
- release.nix +0/−67
- shell.nix +14/−2
- src/System/GPIO/Linux/Sysfs/Mock.hs +3/−6
- src/System/GPIO/Linux/Sysfs/Monad.hs +1/−3
- stack-lts-9.yaml +10/−0
- stack.yaml +1/−6
.travis.yml view
@@ -40,6 +40,9 @@ - env: BUILD=cabal GHCVER=8.2.1 CABALVER=2.0 HAPPYVER=1.19.5 ALEXVER=3.1.7 compiler: ": #GHC 8.2.1" addons: {apt: {packages: [cabal-install-2.0,ghc-8.2.1,happy-1.19.5,alex-3.1.7], sources: [hvr-ghc]}}+ - env: BUILD=cabal GHCVER=8.2.2 CABALVER=2.0 HAPPYVER=1.19.5 ALEXVER=3.1.7+ compiler: ": #GHC 8.2.2"+ addons: {apt: {packages: [cabal-install-2.0,ghc-8.2.2,happy-1.19.5,alex-3.1.7], sources: [hvr-ghc]}} # Build with the newest GHC and cabal-install. This is an accepted failure, # see below.@@ -67,6 +70,10 @@ - env: BUILD=stack ARGS="--resolver lts-7" STACK_YAML=stack-lts-7.yaml compiler: ": #stack 8.0.1"+ addons: {apt: {packages: [libgmp-dev]}}++ - env: BUILD=stack ARGS="--resolver lts-9" STACK_YAML=stack-lts-9.yaml+ compiler: ": #stack 8.0.2" addons: {apt: {packages: [libgmp-dev]}} # Nightly builds are allowed to fail
changelog.md view
@@ -1,3 +1,15 @@+## 0.9.0.3 (2018-01-25)++Changes:+ - Bump QuickCheck, hlint bounds.+ - Add GHC 8.2.2 to .travis.yml.+ - Much improved Nix support, including a default fixed nixpkgs+ revision and Hydra jobsets.+ - Stackage LTS 10 support.++Fixes:+ - Fixed new hlint issues.+ ## 0.9.0.2 (2017-10-18) Changes:
+ default.nix view
@@ -0,0 +1,11 @@+# From GitHub: mozilla/nixpkgs-mozilla/default.nix.++self: super:++with super.lib;++(foldl' (flip extends) (_: super) [++ (import ./nix/overlays/haskell-overrides.nix)++]) self
hpio.cabal view
@@ -1,9 +1,11 @@--- This file has been generated from package.yaml by hpack version 0.19.2.+-- This file has been generated from package.yaml by hpack version 0.21.2. -- -- see: https://github.com/sol/hpack+--+-- hash: 998649f85926e44c675d5e7d0f9074add5f856d11f0f01dc411e7db73e59f8c9 name: hpio-version: 0.9.0.2+version: 0.9.0.3 synopsis: Monads for GPIO in Haskell description: This package provides an embedded DSL for writing cross-platform GPIO programs in Haskell. Currently only Linux is supported (via the@@ -33,16 +35,24 @@ extra-source-files: .travis.yml changelog.md+ default.nix Hlint.hs- nix/hpio.nix+ nix/fetch-nixpkgs.nix+ nix/jobsets/default.nix+ nix/jobsets/release.nix+ nix/jobsets/spec.json+ nix/lib.nix+ nix/nixpkgs-src.json+ nix/overlays/haskell-overrides.nix+ nix/pkgs/hpio.nix package.yaml README.md- release.nix shell.nix stack-lts-2.yaml stack-lts-3.yaml stack-lts-6.yaml stack-lts-7.yaml+ stack-lts-9.yaml stack.yaml source-repository head@@ -79,7 +89,7 @@ c-sources: src/System/GPIO/Linux/Sysfs/pollSysfs.c build-depends:- QuickCheck >=2.7.6 && <2.11+ QuickCheck >=2.7.6 && <2.12 , base >=4.7.0 && <5 , bytestring >=0.10.4 && <0.11 , containers >=0.5.5 && <0.6@@ -243,7 +253,7 @@ else build-depends: base- , hlint+ , hlint >=1.9 && <2.1 , protolude default-language: Haskell2010
+ nix/fetch-nixpkgs.nix view
@@ -0,0 +1,25 @@+# From https://github.com/input-output-hk/iohk-ops/blob/a25d2d9320f8b8f3515f1195d5fceba96fd24493/fetch-nixpkgs.nix++let+ spec = builtins.fromJSON (builtins.readFile ./nixpkgs-src.json);+ src = import <nix/fetchurl.nix> {+ url = "https://github.com/${spec.owner}/${spec.repo}/archive/${spec.rev}.tar.gz";+ inherit (spec) sha256;+ };+ nixcfg = import <nix/config.nix>;+in builtins.derivation {+ system = builtins.currentSystem;+ name = "${src.name}-unpacked";+ builder = builtins.storePath nixcfg.shell;+ inherit src;+ args = [+ (builtins.toFile "builder" ''+ $coreutils/mkdir $out+ cd $out+ $gzip -d < $src | $tar -x --strip-components=1+ '')+ ];+ coreutils = builtins.storePath nixcfg.coreutils;+ tar = builtins.storePath nixcfg.tar;+ gzip = builtins.storePath nixcfg.gzip;+}
− nix/hpio.nix
@@ -1,29 +0,0 @@-{ mkDerivation, async, base, bytestring, containers, directory-, doctest, exceptions, filepath, hlint, hspec, monad-control-, monad-logger, mtl, optparse-applicative, protolude, QuickCheck-, stdenv, text, transformers, transformers-base, unix-, unix-bytestring-}:-mkDerivation {- pname = "hpio";- version = "0.9.0.2";- src = ../.;- isLibrary = true;- isExecutable = true;- libraryHaskellDepends = [- base bytestring containers directory exceptions filepath- monad-control monad-logger mtl protolude QuickCheck text- transformers transformers-base unix unix-bytestring- ];- executableHaskellDepends = [- async base exceptions mtl optparse-applicative protolude text- transformers- ];- testHaskellDepends = [- base containers directory doctest exceptions filepath hlint hspec- protolude QuickCheck- ];- homepage = "https://github.com/quixoftic/hpio#readme";- description = "Monads for GPIO in Haskell";- license = stdenv.lib.licenses.bsd3;-}
+ nix/jobsets/default.nix view
@@ -0,0 +1,63 @@+# Based on+# https://github.com/input-output-hk/iohk-ops/blob/df01a228e559e9a504e2d8c0d18766794d34edea/jobsets/default.nix++{ nixpkgs ? <nixpkgs>+, declInput ? {}+}:++let++ hpioUri = "https://github.com/quixoftic/hpio.git";++ mkFetchGithub = value: {+ inherit value;+ type = "git";+ emailresponsible = false;+ };++ nixpkgs-src = builtins.fromJSON (builtins.readFile ../nixpkgs-src.json);++ pkgs = import nixpkgs {};++ defaultSettings = {+ enabled = 1;+ hidden = false;+ keepnr = 10;+ schedulingshares = 100;+ checkinterval = 60;+ enableemail = false;+ emailoverride = "";+ nixexprpath = "nix/jobsets/release.nix";+ nixexprinput = "hpio";+ description = "hpio";+ inputs = {+ hpio = mkFetchGithub "${hpioUri} master";+ };+ };++ mkChannelAlt = hpioBranch: nixpkgsRev: {+ checkinterval = 60;+ schedulingshares = 100;+ inputs = {+ nixpkgs_override = mkFetchGithub "https://github.com/NixOS/nixpkgs-channels.git ${nixpkgsRev}";+ hpio = mkFetchGithub "${hpioUri} ${hpioBranch}";+ };+ };++ mainJobsets = with pkgs.lib; mapAttrs (name: settings: defaultSettings // settings) (rec {+ master = {};+ nixpkgs-unstable = mkChannelAlt "master" "nixpkgs-unstable";+ });++ jobsetsAttrs = mainJobsets;++ jobsetJson = pkgs.writeText "spec.json" (builtins.toJSON jobsetsAttrs);++in {+ jobsets = with pkgs.lib; pkgs.runCommand "spec.json" {} ''+ cat <<EOF+ ${builtins.toJSON declInput}+ EOF+ cp ${jobsetJson} $out+ '';+}
+ nix/jobsets/release.nix view
@@ -0,0 +1,28 @@+let++ fixedNixPkgs = (import ../lib.nix).fetchNixPkgs;++in++{ supportedSystems ? [ "x86_64-darwin" "x86_64-linux" ]+, scrubJobs ? true+, nixpkgsArgs ? {+ config = { allowUnfree = true; allowBroken = true; inHydra = true; };+ overlays = [ (import ../../.) ];+ }+}:++with import (fixedNixPkgs + "/pkgs/top-level/release-lib.nix") {+ inherit supportedSystems scrubJobs nixpkgsArgs;+};++let++ jobs = (mapTestOn ({+ haskellPackages = packagePlatforms pkgs.haskellPackages;+ }));++in+{+ inherit (jobs.haskellPackages) hpio;+}
+ nix/jobsets/spec.json view
@@ -0,0 +1,16 @@+{+ "enabled": 1,+ "hidden": false,+ "description": "hpio jobsets",+ "nixexprinput": "src",+ "nixexprpath": "nix/jobsets/default.nix",+ "checkinterval": 60,+ "schedulingshares": 100,+ "enableemail": false,+ "emailoverride": "",+ "keepnr": 5,+ "inputs": {+ "src": { "type": "git", "value": "https://github.com/quixoftic/hpio.git master", "emailresponsible": false }+ ,"nixpkgs": { "type": "git", "value": "https://github.com/NixOS/nixpkgs-channels.git nixpkgs-unstable", "emailresponsible": false }+ }+}
+ nix/lib.nix view
@@ -0,0 +1,23 @@+let++ # From https://github.com/input-output-hk/iohk-ops/blob/e6f1ae95cdbfdd5c213aa0b9a1ef67150febc503/lib.nix+ + fetchNixPkgs =+ let+ try = builtins.tryEval <nixpkgs_override>;+ in+ if try.success+ then builtins.trace "Using <nixpkgs_override>" try.value+ else import ./fetch-nixpkgs.nix;++ nixpkgs = import fetchNixPkgs;++ pkgs = nixpkgs {};++ lib = pkgs.lib;++in lib // (rec {++ inherit fetchNixPkgs;++})
+ nix/nixpkgs-src.json view
@@ -0,0 +1,6 @@+{+ "owner": "NixOS"+, "repo": "nixpkgs-channels"+, "rev": "a8d0b805b19a9f5713d0733ddd3d6610654140a0"+, "sha256": "0a28qxilbax2zi2px19mp7nrgh1nsba1dnlw2a4l80xk7n0iywd2"+}
+ nix/overlays/haskell-overrides.nix view
@@ -0,0 +1,15 @@+self: super:++let++ inherit (self) haskell;++in+{+ haskellPackages = super.haskellPackages.extend (self: super:+ with haskell.lib;+ rec {+ hpio = self.callPackage ../pkgs/hpio.nix {};+ }+ );+}
+ nix/pkgs/hpio.nix view
@@ -0,0 +1,29 @@+{ mkDerivation, async, base, bytestring, containers, directory+, doctest, exceptions, filepath, hlint, hspec, monad-control+, monad-logger, mtl, optparse-applicative, protolude, QuickCheck+, stdenv, text, transformers, transformers-base, unix+, unix-bytestring+}:+mkDerivation {+ pname = "hpio";+ version = "0.9.0.3";+ src = ../../.;+ isLibrary = true;+ isExecutable = true;+ libraryHaskellDepends = [+ base bytestring containers directory exceptions filepath+ monad-control monad-logger mtl protolude QuickCheck text+ transformers transformers-base unix unix-bytestring+ ];+ executableHaskellDepends = [+ async base exceptions mtl optparse-applicative protolude text+ transformers+ ];+ testHaskellDepends = [+ base containers directory doctest exceptions filepath hlint hspec+ protolude QuickCheck+ ];+ homepage = "https://github.com/quixoftic/hpio#readme";+ description = "Monads for GPIO in Haskell";+ license = stdenv.lib.licenses.bsd3;+}
package.yaml view
@@ -1,5 +1,5 @@ name: hpio-version: 0.9.0.2+version: 0.9.0.3 synopsis: Monads for GPIO in Haskell category: System stability: experimental@@ -113,7 +113,7 @@ - TypeSynonymInstances - UndecidableInstances dependencies:- - QuickCheck >=2.7.6 && <2.11+ - QuickCheck >=2.7.6 && <2.12 - base >=4.7.0 && <5 - bytestring >=0.10.4 && <0.11 - containers >=0.5.5 && <0.6@@ -194,7 +194,7 @@ else: dependencies: - base- - hlint+ - hlint >= 1.9 && <2.1 - protolude doctest: main: doctest.hs@@ -228,8 +228,6 @@ - hspec >=2.1.7 - protolude - QuickCheck- ghc-options:- - -threaded when: - condition: flag(linux-bbone-tests) cpp-options:@@ -240,12 +238,14 @@ - Hlint.hs - README.md - changelog.md+ - default.nix - nix/*+ - nix/*/* - package.yaml- - release.nix - shell.nix - stack.yaml - stack-lts-2.yaml - stack-lts-3.yaml - stack-lts-6.yaml - stack-lts-7.yaml+ - stack-lts-9.yaml
− release.nix
@@ -1,67 +0,0 @@-{ compiler ? "ghc821" }:--let- # Disable tests for these packages- dontCheckPackages = [- ];-- # Jailbreak these packages- doJailbreakPackages = [- ];-- # Disable haddocks for these packages- dontHaddockPackages = [- ];-- config = {- packageOverrides = pkgs: rec {- haskellPackages =- let- generatedOverrides = haskellPackagesNew: haskellPackagesOld:- let- toPackage = file: _: {- name = builtins.replaceStrings [ ".nix" ] [ "" ] file;-- value = haskellPackagesNew.callPackage (./. + "/nix/${file}") { };- };-- in- pkgs.lib.mapAttrs' toPackage (builtins.readDir ./nix);-- makeOverrides =- function: names: haskellPackagesNew: haskellPackagesOld:- let- toPackage = name: {- inherit name;-- value = function haskellPackagesOld.${name};- };-- in- builtins.listToAttrs (map toPackage names);-- composeExtensionsList =- pkgs.lib.fold pkgs.lib.composeExtensions (_: _: {});-- # More exotic overrides go here- manualOverrides = haskellPackagesNew: haskellPackagesOld: {- protolude = pkgs.haskell.packages.${compiler}.protolude_0_2;- };- in- pkgs.haskell.packages.${compiler}.override {- overrides = composeExtensionsList [- generatedOverrides- (makeOverrides pkgs.haskell.lib.dontCheck dontCheckPackages )- (makeOverrides pkgs.haskell.lib.doJailbreak doJailbreakPackages)- (makeOverrides pkgs.haskell.lib.dontHaddock dontHaddockPackages)- manualOverrides- ];- };- };- };-- pkgs = import <nixpkgs> { inherit config; };--in- { hpio = pkgs.haskellPackages.hpio;- }
shell.nix view
@@ -1,3 +1,15 @@-{ compiler ? "ghc821" }:+{ compiler ? "ghc822"+, overlays ? [ (import ./.) ]+}: -(import ./release.nix { inherit compiler; }).hpio.env+let++ fixedNixPkgs = (import ./nix/lib.nix).fetchNixPkgs;++ pkgs = (import fixedNixPkgs) { inherit overlays; };++ drv = pkgs.haskellPackages.hpio;++in++ if pkgs.lib.inNixShell then drv.env else drv
src/System/GPIO/Linux/Sysfs/Mock.hs view
@@ -569,8 +569,7 @@ -- filesystem. doesDirectoryExist :: (MockM m) => FilePath -> SysfsMockT m Bool doesDirectoryExist path =- do cwz <- getZipper- return $ either (const False) (const True) (Internal.cd path cwz)+ either (const False) (const True) . Internal.cd path <$> getZipper -- | Check whether the specified file exists in the mock filesystem. doesFileExist :: (MockM m) => FilePath -> SysfsMockT m Bool@@ -605,8 +604,7 @@ Just (Direction pin) -> do visible <- _userVisibleDirection <$> pinState pin if visible- then do direction <- _direction <$> pinState pin- return $ pinDirectionToBS direction+ then pinDirectionToBS . _direction <$> pinState pin else throwM $ InternalError $ unwords ["Mock pin", show pin, "has no direction but direction attribute is exported"]@@ -720,8 +718,7 @@ fileAt path = let (dirPath, fileName) = splitFileName path in- do parent <- _cwd <$> cd dirPath- return $ findFile fileName parent+ findFile fileName . _cwd <$> cd dirPath -- | For the mock filesystem, this action is equivalent to -- 'writeFile'.
src/System/GPIO/Linux/Sysfs/Monad.hs view
@@ -529,9 +529,7 @@ maybeReadPinEdge = pinHasEdge p >>= \case False -> return Nothing- True ->- do edge <- readPinEdge p- return $ Just edge+ True -> Just <$> readPinEdge p writeDirection :: (CatchSysfsM m) => Pin -> ByteString -> m () writeDirection p bs =
+ stack-lts-9.yaml view
@@ -0,0 +1,10 @@+require-stack-version: ">= 1.1.0"+pvp-bounds: both+resolver: lts-9.6+extra-deps:+- protolude-0.2+packages:+- .+flags:+ hpio:+ test-hlint: false
stack.yaml view
@@ -1,10 +1,5 @@ require-stack-version: ">= 1.1.0" pvp-bounds: both-resolver: lts-9.6-extra-deps:-- protolude-0.2+resolver: lts-10.3 packages: - .-flags:- hpio:- test-hlint: false