diff --git a/Bulletproofs/ArithmeticCircuit/Internal.hs b/Bulletproofs/ArithmeticCircuit/Internal.hs
--- a/Bulletproofs/ArithmeticCircuit/Internal.hs
+++ b/Bulletproofs/ArithmeticCircuit/Internal.hs
@@ -4,7 +4,6 @@
 module Bulletproofs.ArithmeticCircuit.Internal where
 
 import Protolude hiding (head)
-import Control.Monad.Fail
 import Data.List (head)
 import qualified Data.List as List
 import qualified Data.Map as Map
@@ -186,7 +185,7 @@
   | lConstraints < m = panic "Number of constraints must be bigger than m"
   | otherwise = shuffleM (genIdenMatrix m ++ genZeroMatrix (lConstraints - m) m)
 
-generateGateWeights :: (Crypto.MonadRandom m, Num f, MonadFail m) => Integer -> Integer -> m (GateWeights f)
+generateGateWeights :: (Crypto.MonadRandom m, Num f) => Integer -> Integer -> m (GateWeights f)
 generateGateWeights lConstraints n = do
   [wL, wR, wO] <- replicateM 3 ((\i -> insertAt (fromIntegral i) (oneVector n) (replicate (fromIntegral lConstraints - 1) (zeroVector n))) <$> generateMax (fromIntegral lConstraints))
   pure $ GateWeights wL wR wO
diff --git a/Bulletproofs/ArithmeticCircuit/Prover.hs b/Bulletproofs/ArithmeticCircuit/Prover.hs
--- a/Bulletproofs/ArithmeticCircuit/Prover.hs
+++ b/Bulletproofs/ArithmeticCircuit/Prover.hs
@@ -3,7 +3,6 @@
 
 import Protolude
 
-import Control.Monad.Fail
 import Crypto.Random.Types (MonadRandom(..))
 import Crypto.Number.Generate (generateMax)
 import qualified Crypto.PubKey.ECC.Prim as Crypto
@@ -18,7 +17,7 @@
 -- for an arithmetic circuit with a valid witness
 generateProof
   :: forall f m
-   . (MonadRandom m, MonadFail m, AsInteger f, Field f, Show f, Eq f)
+   . (MonadRandom m, AsInteger f, Field f, Show f, Eq f)
   => ArithCircuit f
   -> ArithWitness f
   -> m (ArithCircuitProof f)
diff --git a/Bulletproofs/MultiRangeProof/Prover.hs b/Bulletproofs/MultiRangeProof/Prover.hs
--- a/Bulletproofs/MultiRangeProof/Prover.hs
+++ b/Bulletproofs/MultiRangeProof/Prover.hs
@@ -7,7 +7,6 @@
 
 import Protolude
 
-import Control.Monad.Fail
 import Crypto.Random.Types (MonadRandom(..))
 import Crypto.Number.Generate (generateMax)
 import qualified Crypto.PubKey.ECC.Generate as Crypto
@@ -21,9 +20,9 @@
 import Bulletproofs.InnerProductProof as IPP hiding (generateProof)
 import qualified Bulletproofs.InnerProductProof as IPP
 
--- | Prove that a list of values lies in a specific range
+-- | Prove that a list of values lie in a specific range
 generateProof
-  :: (AsInteger f, Eq f, Field f, Show f, MonadRandom m, MonadFail m)
+  :: (AsInteger f, Eq f, Field f, Show f, MonadRandom m)
   => Integer                -- ^ Upper bound of the range we want to prove
   -> [(Integer, Integer)]
   -- ^ Values we want to prove in range and their blinding factors
@@ -54,7 +53,7 @@
 -- | Generate range proof from valid inputs
 generateProofUnsafe
   :: forall f m
-   . (AsInteger f, Eq f, Field f, Show f, MonadRandom m, MonadFail m)
+   . (AsInteger f, Eq f, Field f, Show f, MonadRandom m)
   => Integer    -- ^ Upper bound of the range we want to prove
   -> [(Integer, Integer)]
   -- ^ Values we want to prove in range and their blinding factors
diff --git a/Bulletproofs/RangeProof/Prover.hs b/Bulletproofs/RangeProof/Prover.hs
--- a/Bulletproofs/RangeProof/Prover.hs
+++ b/Bulletproofs/RangeProof/Prover.hs
@@ -5,7 +5,6 @@
 
 import Protolude
 
-import Control.Monad.Fail
 import Crypto.Random.Types (MonadRandom(..))
 
 import Bulletproofs.Utils (AsInteger, Field)
@@ -14,7 +13,7 @@
 
 -- | Prove that a value lies in a specific range
 generateProof
-  :: (AsInteger f, Eq f, Field f, Show f, MonadRandom m, MonadFail m)
+  :: (AsInteger f, Eq f, Field f, Show f, MonadRandom m)
   => Integer                -- ^ Upper bound of the range we want to prove
   -> (Integer, Integer)
   -- ^ Values we want to prove in range and their blinding factors
@@ -24,7 +23,7 @@
 
 -- | Generate range proof from valid inputs
 generateProofUnsafe
-  :: (AsInteger f, Eq f, Field f, Show f, MonadRandom m, MonadFail m)
+  :: (AsInteger f, Eq f, Field f, Show f, MonadRandom m)
   => Integer    -- ^ Upper bound of the range we want to prove
   -> (Integer, Integer)
   -- ^ Values we want to prove in range and their blinding factors
diff --git a/bulletproofs.cabal b/bulletproofs.cabal
--- a/bulletproofs.cabal
+++ b/bulletproofs.cabal
@@ -2,10 +2,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 001d69dda0cfa16ecf909cb395bf12816dd1e053a263be2983d7dbe569e9a5a0
+-- hash: 3cc8d96dc71be213e360a7402cd170482c94bcd862ac5cfeb4687ac2726aa53f
 
 name:           bulletproofs
-version:        0.2.1
+version:        0.3.0
 description:    Please see the README on GitHub at <https://github.com/adjoint-io/bulletproofs#readme>
 category:       Cryptography
 homepage:       https://github.com/adjoint-io/bulletproofs#readme
