use Data.Kind.Type instead of *
This commit is contained in:
parent
1752d03fe7
commit
1b2a8bdce6
@ -11,6 +11,8 @@ module Data.CryptoID.Class
|
||||
|
||||
import Data.CryptoID (CryptoID)
|
||||
|
||||
import Data.Kind
|
||||
|
||||
import GHC.TypeLits (Symbol)
|
||||
|
||||
import Control.Monad.Catch (MonadThrow)
|
||||
@ -18,18 +20,16 @@ import Control.Monad.Catch (MonadThrow)
|
||||
-- | Class of monads granting reader access to a key and allowing for failure during cryptographic operations
|
||||
--
|
||||
-- This formulation is weaker than @MonadReader key@ (from mtl) in that it does not require @local@.
|
||||
class MonadThrow m => MonadCrypto (m :: * -> *) where
|
||||
type MonadCryptoKey m :: *
|
||||
class MonadThrow m => MonadCrypto (m :: Type -> Type) where
|
||||
type MonadCryptoKey m :: Type
|
||||
cryptoIDKey :: (MonadCryptoKey m -> m a) -> m a
|
||||
|
||||
-- | Multiparameter typeclass of @(namespace, ciphertext, plaintext, monad)@ tuples which allow for cryptographic operations on 'CryptoID's with appropriate @namespace@, @plaintext@, and @ciphertext@, utilising the state of @monad@
|
||||
--
|
||||
-- Instances of this typeclass are usually universally quantified over (at least) @namespace@, and @m@
|
||||
class MonadCrypto m => HasCryptoID (namespace :: Symbol) (ciphertext :: *) (plaintext :: *) (m :: * -> *) where
|
||||
class MonadCrypto m => HasCryptoID (namespace :: Symbol) (ciphertext :: Type) (plaintext :: Type) (m :: Type -> Type) where
|
||||
encrypt :: plaintext -> m (CryptoID namespace ciphertext)
|
||||
-- ^ Encrypt a @plaintext@ in a fashion dependent on the @namespace@ and desired @ciphertext@-type retrieving the key from and throwing errors into @m@
|
||||
|
||||
decrypt :: CryptoID namespace ciphertext -> m plaintext
|
||||
-- ^ Encrypt a @ciphertext@ in a fashion dependent on the @namespace@ and desired @plaintext@-type retrieving the key from and throwing errors into @m@
|
||||
|
||||
|
||||
|
||||
@ -17,11 +17,13 @@ module Data.CryptoID.Class.ImplicitNamespace
|
||||
import qualified Data.CryptoID.Class as E
|
||||
import qualified Data.CryptoID as E
|
||||
|
||||
import Data.Kind
|
||||
|
||||
import GHC.TypeLits (Symbol)
|
||||
|
||||
|
||||
-- | Type family of @namespace@s associated to certain @plaintext@-types (parameterized over @ciphertext@ for completeness)
|
||||
type family CryptoIDNamespace (ciphertext :: *) (plaintext :: *) :: Symbol
|
||||
type family CryptoIDNamespace (ciphertext :: Type) (plaintext :: Type) :: Symbol
|
||||
|
||||
-- | 'E.HasCryptoID' reformulated to utilize 'CryptoIDNamespace'
|
||||
type HasCryptoID ciphertext plaintext = E.HasCryptoID (CryptoIDNamespace ciphertext plaintext) ciphertext plaintext
|
||||
|
||||
Loading…
Reference in New Issue
Block a user