From 0bb8daa7da52240a971a4ce83d97cfb62971ea78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Sun, 18 Oct 2026 16:52:41 +0200 Subject: Add crypto backend using various reference libraries --- src/crypto/reflibs/Crypto/Error.hs | 41 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 src/crypto/reflibs/Crypto/Error.hs (limited to 'src/crypto/reflibs/Crypto/Error.hs') diff --git a/src/crypto/reflibs/Crypto/Error.hs b/src/crypto/reflibs/Crypto/Error.hs new file mode 100644 index 0000000..8f03db7 --- /dev/null +++ b/src/crypto/reflibs/Crypto/Error.hs @@ -0,0 +1,41 @@ +module Crypto.Error ( + CryptoError(..), + CryptoFailable(..), + + throwCryptoErrorIO, + maybeCryptoError, +) where + +import Control.Exception +import Control.Monad + + +data CryptoError = CryptoError + deriving (Show) + +instance Exception CryptoError + +data CryptoFailable a + = CryptoPassed a + | CryptoFailed CryptoError + deriving (Show) + +instance Functor CryptoFailable where + fmap f (CryptoPassed x) = CryptoPassed (f x) + fmap _ (CryptoFailed e) = CryptoFailed e + +instance Applicative CryptoFailable where + pure = CryptoPassed + (<*>) = ap + +instance Monad CryptoFailable where + CryptoPassed x >>= f = f x + CryptoFailed e >>= _ = CryptoFailed e + +throwCryptoErrorIO :: CryptoFailable a -> IO a +throwCryptoErrorIO (CryptoPassed r) = return r +throwCryptoErrorIO (CryptoFailed e) = throwIO e + +maybeCryptoError :: CryptoFailable a -> Maybe a +maybeCryptoError (CryptoPassed x) = Just x +maybeCryptoError (CryptoFailed _) = Nothing -- cgit v1.2.3