protocol: polish imports
authorJulien Moutinho <julm+hjugement@autogeree.net>
Thu, 15 Aug 2019 22:32:53 +0000 (22:32 +0000)
committerJulien Moutinho <julm+hjugement@autogeree.net>
Thu, 15 Aug 2019 22:33:26 +0000 (22:33 +0000)
HLint.hs
hjugement-cli/src/Hjugement/CLI.hs
hjugement-cli/src/Hjugement/CLI/Administrator.hs
hjugement-cli/src/Hjugement/CLI/Registrar.hs
hjugement-cli/src/Hjugement/CLI/Trustee.hs
hjugement-cli/src/Hjugement/CLI/Utils.hs
hjugement-cli/src/Hjugement/CLI/Voter.hs

index 4650cf32649fc89d5a9ff43fe6ae5f9a89db99c8..9c3e1bf99e9fda16220c9f2804fe841339995911 100644 (file)
--- a/HLint.hs
+++ b/HLint.hs
@@ -2,6 +2,7 @@ import "hint" HLint.HLint
 ignore "Move brackets to avoid $"
 ignore "Reduce duplication"
 ignore "Redundant $"
+ignore "Redundant do"
 ignore "Use camelCase"
 ignore "Use import/export shortcut"
 ignore "Use tuple-section"
index 99f4baee4543be6c627273a8bca5fbbdae2aa021..e041b4d5529ee0689eee13dec25b8157c0475fe1 100644 (file)
@@ -6,32 +6,17 @@
 {-# OPTIONS_GHC -Wno-missing-signatures #-}
 module Hjugement.CLI where
 
-import Control.Applicative (Applicative(..), Alternative(..))
 import Control.Monad (Monad(..))
 import Data.Bool
-import Data.Either (Either(..))
-import Data.Function (($), (.))
-import Data.Functor ((<$>), (<$))
-import Data.Int (Int)
-import Data.List.NonEmpty (NonEmpty(..))
-import Data.Maybe (Maybe(..), fromMaybe)
-import Data.Ord (Ord(..))
+import Data.Function (($))
 import Data.Semigroup (Semigroup(..))
-import Data.String (String)
 import Data.Text (Text)
 import Data.Void (Void)
 import Symantic.CLI as CLI
-import System.Environment (getArgs)
-import System.IO (IO, FilePath, print, stderr, putStrLn)
-import Text.Show (Show(..))
-import Type.Reflection (Typeable)
-import qualified Data.Set as Set
 import qualified Data.Text as Text
-import qualified Data.Text.Lazy.IO as TL
 import qualified Data.Version as Version
 import qualified Paths_hjugement_cli as Hjugement
 import qualified Symantic.Document as Doc
-import qualified System.IO as IO
 
 import Hjugement.CLI.Utils
 import Hjugement.CLI.Administrator
index 0fee22992ed8c7b12cac81bc4358cb51a2b33cc9..c82007ef0bb351708534f1648b7928fbc32563cb 100644 (file)
@@ -4,68 +4,31 @@
 {-# OPTIONS_GHC -Wno-missing-signatures #-}
 module Hjugement.CLI.Administrator where
 
-import Control.Applicative (Applicative(..), Alternative(..))
-import Control.Monad (Monad(..), forM, forM_, join, unless, void)
-import Control.Monad.Trans.Class (MonadTrans(..))
+import Control.Applicative (Applicative(..))
+import Control.Monad (Monad(..), forM_, unless)
 import Control.Monad.Trans.Except (runExcept)
 import Control.Monad.Trans.Maybe (MaybeT(..))
-import Control.Monad.Trans.State.Strict (runState, runStateT)
-import Data.Bits (setBit)
+import Control.Monad.Trans.State.Strict (runState)
 import Data.Bool
-import Data.ByteString (ByteString)
 import Data.Either (Either(..))
 import Data.Eq (Eq(..))
-import Data.Foldable (Foldable, foldMap, length, null)
-import Data.Function (($), (.), id, flip)
-import Data.Functor ((<$>), (<$))
-import Data.Int (Int)
-import Data.Maybe (Maybe(..), maybe, fromMaybe, fromJust)
-import Data.Monoid (Monoid(..))
+import Data.Function (($), id, flip)
+import Data.Functor ((<$>))
+import Data.Maybe (Maybe(..), fromMaybe)
 import Data.Ord (Ord(..))
 import Data.Proxy (Proxy(..))
 import Data.Semigroup (Semigroup(..))
-import Data.String (String)
 import Data.Text (Text)
-import GHC.Natural (minusNatural, minusNaturalMaybe)
-import GHC.Prim (coerce)
-import Numeric.Natural (Natural)
-import Pipes ((>->))
-import Prelude (logBase, ceiling, Num(..), (/), (^), fromIntegral, Double)
 import Symantic.CLI as CLI
-import System.IO (IO, FilePath)
 import Text.Show (Show(..))
-import qualified Crypto.Hash as Crypto
 import qualified Data.Aeson as JSON
-import qualified Data.ByteArray as ByteArray
-import qualified Data.ByteString as BS
-import qualified Data.ByteString.Char8 as BS8
 import qualified Data.ByteString.Lazy as BSL
 import qualified Data.List as List
 import qualified Data.Text as Text
-import qualified Data.Text.Encoding as Text
-import qualified Data.Text.Lazy as TL
-import qualified Data.Text.Lazy.Builder as TLB
-import qualified Data.Text.Lazy.Builder.Int as TLB
-import qualified Data.Text.Lazy.Encoding as TL
-import qualified Data.Text.Lazy.IO as TL
-import qualified Data.Time as Time
-import qualified Lens.Family as Lens
-import qualified Lens.Family.State.Strict as Lens
 import qualified Pipes as Pip
-import qualified Pipes.ByteString as PipBS
-import qualified Pipes.Group as Pip
 import qualified Pipes.Prelude as Pip
-import qualified Pipes.Aeson as PipJSON (DecodingError(..))
-import qualified Pipes.Aeson.Unchecked as PipJSON
-import qualified Pipes.Safe as Pip
-import qualified Pipes.Safe.Prelude as Pip
-import qualified Pipes.Text as PipText
-import qualified Pipes.Text.Encoding as PipText
-import qualified Pipes.Text.IO as PipText
 import qualified Symantic.Document as Doc
 import qualified System.FilePath as FP
-import qualified System.IO as IO
-import qualified System.Posix as Posix
 import qualified System.Random as Rand
 import qualified Voting.Protocol as VP
 
index 51df1beda91354476787906c1ce967f238a983be..184c6dfeffbdc6955b2dd5075dcc82c6e6b14538 100644 (file)
@@ -1,59 +1,42 @@
 {-# LANGUAGE NoMonomorphismRestriction #-}
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeApplications #-}
 {-# OPTIONS_GHC -Wno-missing-signatures #-}
 module Hjugement.CLI.Registrar where
 
 import Control.Arrow (left)
 import Control.Applicative (Applicative(..))
-import Control.Monad (Monad(..), forM, forM_, join, void)
-import Control.Monad.Trans.Class (MonadTrans(..))
+import Control.Monad (Monad(..))
 import Control.Monad.Trans.Maybe (MaybeT(..))
-import Control.Monad.Trans.State.Strict (runState, runStateT)
+import Control.Monad.Trans.State.Strict (runState)
 import Data.Bool
-import Data.ByteString (ByteString)
 import Data.Either (Either(..))
-import Data.Foldable (Foldable, foldMap, length)
-import Data.Function (($), (.), flip)
+import Data.Function (($), (.))
 import Data.Functor ((<$>))
-import Data.Int (Int)
-import Data.Maybe (Maybe(..), maybe, fromMaybe)
-import Data.Ord (Ord(..))
+import Data.Maybe (Maybe(..))
 import Data.Proxy (Proxy(..))
 import Data.Semigroup (Semigroup(..))
-import Data.String (String)
-import Data.Text (Text)
-import GHC.Natural (minusNatural, minusNaturalMaybe)
+import GHC.Natural (minusNatural)
 import Numeric.Natural (Natural)
 import Pipes ((>->))
 import Prelude (logBase, ceiling, Num(..), (/), (^), fromIntegral, Double)
 import Symantic.CLI as CLI
 import Text.Show (Show(..))
-import qualified Data.ByteString as BS
-import qualified Data.ByteString.Char8 as BS8
-import qualified Data.ByteString.Lazy as BSL
 import qualified Data.List as List
 import qualified Data.Text as T
-import qualified Data.Text.Encoding as T
-import qualified Data.Text.Lazy as TL
-import qualified Data.Text.Lazy.Encoding as TL
-import qualified Data.Text.Lazy.IO as TL
 import qualified Data.Time as Time
 import qualified Lens.Family as Lens
-import qualified Lens.Family.State.Strict as Lens
 import qualified Pipes as Pip
 import qualified Pipes.ByteString as PipBS
 import qualified Pipes.Group as Pip
 import qualified Pipes.Prelude as Pip
-import qualified Pipes.Safe as Pip
 import qualified Pipes.Safe.Prelude as Pip
 import qualified Pipes.Text as PipText
 import qualified Pipes.Text.Encoding as PipText
-import qualified Pipes.Text.IO as PipText
 import qualified Symantic.Document as Doc
 import qualified System.FilePath as FP
 import qualified System.IO as IO
-import qualified System.Posix as Posix
 import qualified System.Random as Rand
 import qualified Voting.Protocol as VP
 
@@ -92,7 +75,7 @@ api_registrar_pubkey =
                <.> response @Natural
 run_registrar_pubkey
  Global_Params{..}
o@Registrar_Params{..}
+ Registrar_Params{..}
  cred =
        return $
                VP.reify registrar_election_crypto $ \(_::Proxy c) ->
@@ -126,7 +109,7 @@ api_registrar_credentials =
                <.> response @(Maybe ())
 run_registrar_credentials
  glob@Global_Params{..}
o@Registrar_Params{..} =
+ Registrar_Params{..} =
        run_count :!:
        run_file
        where
index a0701af2804621b1a0a9f0203b878d12c9619609..dd6bf24fbb64231b669c351dfb124a83b08f8836 100644 (file)
@@ -1,70 +1,34 @@
 {-# LANGUAGE NoMonomorphismRestriction #-}
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeApplications #-}
 {-# OPTIONS_GHC -Wno-missing-signatures #-}
 module Hjugement.CLI.Trustee where
 
 import Control.Applicative (Applicative(..))
-import Control.Monad (Monad(..), forM, forM_, join, void)
-import Control.Monad.Trans.Class (MonadTrans(..))
+import Control.Monad (Monad(..))
 import Control.Monad.Trans.Maybe (MaybeT(..))
-import Control.Monad.Trans.State.Strict (runState, runStateT)
-import Data.Bits (setBit)
+import Control.Monad.Trans.State.Strict (runState)
 import Data.Bool
-import Data.ByteString (ByteString)
-import Data.Either (Either(..))
 import Data.Eq (Eq(..))
-import Data.Foldable (Foldable, foldMap, length, null)
+import Data.Foldable (null)
 import Data.Function (($), (.), id, flip)
 import Data.Functor ((<$>))
-import Data.Int (Int)
-import Data.Maybe (Maybe(..), maybe, fromMaybe)
-import Data.Monoid (Monoid(..))
+import Data.Maybe (Maybe(..))
 import Data.Ord (Ord(..))
 import Data.Proxy (Proxy(..))
 import Data.Semigroup (Semigroup(..))
-import Data.String (String)
-import Data.Text (Text)
-import GHC.Natural (minusNatural, minusNaturalMaybe)
 import GHC.Prim (coerce)
-import Numeric.Natural (Natural)
 import Pipes ((>->))
-import Prelude (logBase, ceiling, Num(..), (/), (^), fromIntegral, Double)
 import Symantic.CLI as CLI
 import Text.Show (Show(..))
-import System.IO (IO, FilePath)
-import qualified Crypto.Hash as Crypto
-import qualified Data.Aeson as JSON
-import qualified Data.ByteArray as ByteArray
-import qualified Data.ByteString as BS
-import qualified Data.ByteString.Char8 as BS8
-import qualified Data.ByteString.Lazy as BSL
+import System.IO (FilePath)
 import qualified Data.List as List
 import qualified Data.Text as T
-import qualified Data.Text.Encoding as T
-import qualified Data.Text.Lazy as TL
-import qualified Data.Text.Lazy.Builder as TLB
-import qualified Data.Text.Lazy.Builder.Int as TLB
-import qualified Data.Text.Lazy.Encoding as TL
-import qualified Data.Text.Lazy.IO as TL
-import qualified Data.Time as Time
-import qualified Lens.Family as Lens
-import qualified Lens.Family.State.Strict as Lens
 import qualified Pipes as Pip
-import qualified Pipes.ByteString as PipBS
-import qualified Pipes.Group as Pip
 import qualified Pipes.Prelude as Pip
-import qualified Pipes.Aeson as PipJSON (DecodingError(..))
-import qualified Pipes.Aeson.Unchecked as PipJSON
-import qualified Pipes.Safe as Pip
-import qualified Pipes.Safe.Prelude as Pip
-import qualified Pipes.Text as PipText
-import qualified Pipes.Text.Encoding as PipText
-import qualified Pipes.Text.IO as PipText
 import qualified Symantic.Document as Doc
 import qualified System.FilePath as FP
-import qualified System.IO as IO
-import qualified System.Posix as Posix
 import qualified System.Random as Rand
 import qualified Voting.Protocol as VP
 
@@ -110,9 +74,9 @@ api_trustee_generate =
                response @()
 run_trustee_generate
  glob@Global_Params{..}
o@Trustee_Params{..} =
+ Trustee_Params{..} =
        VP.reify trustee_crypto $ \(_crypto::Proxy c) -> do
-               keys@(secKey, pubKey) <- Pip.liftIO $ Rand.getStdRandom $ runState $ do
+               (secKey, pubKey) <- Pip.liftIO $ Rand.getStdRandom $ runState $ do
                        secKey <- VP.randomSecretKey @c
                        pubKey <- VP.proveIndispensableTrusteePublicKey secKey
                        return (secKey, pubKey)
@@ -153,7 +117,7 @@ api_trustee_decrypt =
 
 run_trustee_decrypt
  glob@Global_Params{..}
o@Trustee_Params{..}
+ Trustee_Params{..}
  TrusteeDecrypt_Params{..} =
        VP.reify trustee_crypto $ \(_crypto::Proxy c) -> runMaybeT $ do
                (secKey::VP.E c) <- loadJSON glob trusteeDecrypt_privkey
@@ -183,7 +147,7 @@ run_trustee_decrypt
                        outputInfo glob "tally the encrypted ballots"
                        -- FIXME: actually support fetching through an URL
                        let ballotsPath = trusteeDecrypt_url FP.</> "ballots.jsons"
-                       (encTally, numBallots) <- runPipeWithError glob $
+                       (encTally, _numBallots) <- runPipeWithError glob $
                                Pip.fold'
                                 (flip VP.insertEncryptedTally)
                                 VP.emptyEncryptedTally id $
index 657f1dd2bd2bb355c507006c3143f9e0e977c683..e2bc287cc21b70bd4471dfde6bdc681ad219d48e 100644 (file)
@@ -2,19 +2,18 @@
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE Rank2Types #-}
 {-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeApplications #-}
 {-# LANGUAGE UndecidableInstances #-} -- for VP.Reifies instances
 {-# OPTIONS_GHC -Wno-missing-signatures #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 module Hjugement.CLI.Utils where
 
 import Control.Applicative (Applicative(..), Alternative(..))
 import Control.Arrow (left)
 import Control.Monad (Monad(..), forM_, when)
 import Control.Monad.Trans.Maybe (MaybeT(..))
-import Control.Monad.Trans.Except (ExceptT, runExceptT)
-import Control.Monad.Trans.State.Strict (StateT(..), evalStateT)
-import Data.Bits (setBit)
+import Control.Monad.Trans.Except (runExceptT)
 import Data.Bool
-import Data.ByteString (ByteString)
 import Data.Either (Either(..))
 import Data.Eq (Eq(..))
 import Data.Foldable (Foldable)
@@ -24,32 +23,22 @@ import Data.Maybe (Maybe(..), maybe)
 import Data.Monoid (Monoid(..))
 import Data.Ord (Ord(..))
 import Data.Semigroup (Semigroup(..))
-import Data.String (IsString(..))
 import Data.Text (Text)
 import Prelude (min, max, (-))
 import Symantic.CLI as CLI
 import System.IO (IO)
 import Text.Show (Show(..))
-import qualified Crypto.Hash as Crypto
 import qualified Data.Aeson as JSON
-import qualified Data.ByteArray as ByteArray
-import qualified Data.ByteString as BS
 import qualified Data.ByteString.Char8 as BS8
 import qualified Data.ByteString.Lazy.Char8 as BSL8
 import qualified Data.Text as Text
 import qualified Data.Text.Encoding as T
-import qualified Data.Text.Lazy as TL
 import qualified Data.Text.Lazy.Builder as TLB
-import qualified Data.Text.Lazy.Builder.Int as TLB
 import qualified Lens.Family as Lens
-import qualified Lens.Family.State.Strict as Lens
 import qualified Pipes as Pip
 import qualified Pipes.Aeson as PipJSON (DecodingError(..))
 import qualified Pipes.Aeson.Unchecked as PipJSON
 import qualified Pipes.ByteString as PipBS
-import qualified Pipes.Group as Pip
-import qualified Pipes.Parse as Pip
-import qualified Pipes.Prelude as Pip
 import qualified Pipes.Safe as Pip
 import qualified Pipes.Safe.Prelude as Pip
 import qualified Symantic.Document as Doc
@@ -214,8 +203,7 @@ writeFileLn glob fileMode filePath = do
        where
        open = Pip.liftIO $ do
                IO.createDirectoryIfMissing True $ FP.takeDirectory filePath
-               h <- IO.openFile filePath IO.WriteMode
-               return h
+               IO.openFile filePath IO.WriteMode
        close h = Pip.liftIO $ do
                fd <- Posix.handleToFd h
                Posix.setFdMode fd fileMode
@@ -237,8 +225,7 @@ writeJSON glob fileMode filePath = do
        where
        open = Pip.liftIO $ do
                IO.createDirectoryIfMissing True $ FP.takeDirectory filePath
-               h <- IO.openFile filePath IO.WriteMode
-               return h
+               IO.openFile filePath IO.WriteMode
        close h = Pip.liftIO $ do
                fd <- Posix.handleToFd h
                Posix.setFdMode fd fileMode
index f50f1a0b8b5174a53f2113aa885c635b5c181f07..c4ef04534ba9d3e6c572bb2872b221e14747c558 100644 (file)
@@ -1,74 +1,41 @@
 {-# LANGUAGE NoMonomorphismRestriction #-}
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeApplications #-}
 {-# OPTIONS_GHC -Wno-missing-signatures #-}
 module Hjugement.CLI.Voter where
 
 import Control.Applicative (Applicative(..), Alternative(..))
-import Control.Monad (Monad(..), forM, forM_, join, unless, void, when)
-import Control.Monad.Trans.Class (MonadTrans(..))
+import Control.Monad (Monad(..), join, unless, void, when)
 import Control.Monad.Trans.Maybe (MaybeT(..))
-import Control.Monad.Trans.Except (runExcept, runExceptT)
-import Control.Monad.Trans.State.Strict (runState, runStateT)
-import Data.Bits (setBit)
+import Control.Monad.Trans.Except (runExcept)
+import Control.Monad.Trans.State.Strict (runStateT)
 import Data.Bool
-import Data.ByteString (ByteString)
-import Data.Either (Either(..), either)
+import Data.Either (Either(..))
 import Data.Eq (Eq(..))
-import Data.Foldable (Foldable, foldMap, length, null, sum)
-import Data.Function (($), (.), id, flip)
-import Data.Functor ((<$>), (<$))
-import Data.Int (Int)
-import Data.Maybe (Maybe(..), maybe, fromMaybe, fromJust)
-import Data.Monoid (Monoid(..))
+import Data.Foldable (sum)
+import Data.Function (($))
+import Data.Functor ((<$>))
+import Data.Maybe (Maybe(..))
 import Data.Ord (Ord(..))
-import Data.Proxy (Proxy(..))
 import Data.Semigroup (Semigroup(..))
 import Data.String (String)
 import Data.Text (Text)
-import Data.Traversable (sequence)
-import GHC.Natural (minusNatural, minusNaturalMaybe)
-import GHC.Prim (coerce)
 import Numeric.Natural (Natural)
-import Pipes ((>->))
-import Prelude (logBase, ceiling, Num(..), (/), (^), fromIntegral, Double)
+import Prelude (Num(..))
 import Symantic.CLI as CLI
-import System.IO (IO, FilePath)
+import System.IO (FilePath)
 import Text.Show (Show(..))
-import qualified Crypto.Hash as Crypto
 import qualified Data.Aeson as JSON
-import qualified Data.ByteArray as ByteArray
-import qualified Data.ByteString as BS
-import qualified Data.ByteString.Char8 as BS8
-import qualified Data.ByteString.Lazy as BSL
 import qualified Data.ByteString.Lazy.Char8 as BSL8
 import qualified Data.List as List
 import qualified Data.Text as Text
-import qualified Data.Text.Encoding as Text
-import qualified Data.Text.Lazy as TL
-import qualified Data.Text.Lazy.Builder as TLB
-import qualified Data.Text.Lazy.Builder.Int as TLB
-import qualified Data.Text.Lazy.Encoding as TL
-import qualified Data.Text.Lazy.IO as TL
-import qualified Data.Time as Time
-import qualified Lens.Family as Lens
-import qualified Lens.Family.State.Strict as Lens
 import qualified Pipes as Pip
-import qualified Pipes.Aeson as PipJSON (DecodingError(..))
-import qualified Pipes.Aeson.Unchecked as PipJSON
-import qualified Pipes.ByteString as PipBS
-import qualified Pipes.Group as Pip
 import qualified Pipes.Prelude as Pip
-import qualified Pipes.Safe as Pip
-import qualified Pipes.Safe.Prelude as Pip
-import qualified Pipes.Text as PipText
-import qualified Pipes.Text.Encoding as PipText
-import qualified Pipes.Text.IO as PipText
 import qualified Symantic.Document as Doc
 import qualified System.Directory as IO
 import qualified System.FilePath as FP
 import qualified System.IO as IO
-import qualified System.Posix as Posix
 import qualified System.Random as Rand
 import qualified Voting.Protocol as VP
 import qualified Voting.Protocol.Utils as VP
@@ -122,7 +89,7 @@ api_voter_vote =
 
 run_voter_vote
  glob@Global_Params{..}
o@VoterVote_Params{..} = runMaybeT $ do
+ VoterVote_Params{..} = runMaybeT $ do
        rawElec <- loadElection glob $ voterVote_url FP.</> "election.json"
        VP.reifyElection rawElec $ \(elec@VP.Election{..} :: VP.Election c) -> do
                outputInfo glob $ "Voted"<>Doc.from (show voterVote_grades)
@@ -169,11 +136,11 @@ api_voter_verify =
 
 run_voter_verify
  glob@Global_Params{..}
o@VoterVerify_Params{..} = runMaybeT $ do
+ VoterVerify_Params{..} = runMaybeT $ do
        rawElec <- loadElection glob $ voterVerify_url FP.</> "election.json"
        VP.reifyElection rawElec $ \(elec@VP.Election{..} :: VP.Election c) -> do
                outputInfo glob $ "verifying ballots"
-               (fails :: Natural, (encTally :: VP.EncryptedTally c, numBallots)) <- runPipeWithError glob $
+               (fails :: Natural, (encTally :: VP.EncryptedTally c, _numBallots)) <- runPipeWithError glob $
                        Pip.foldM'
                         (\(fails, acc@(_, numBallots)) ballot@VP.Ballot{..} -> do
                                let ballotNum = numBallots + fails