From 22599878a45c3676bfc47ac5fc7c9a640e4c7280 Mon Sep 17 00:00:00 2001 From: Joris Dral Date: Mon, 30 Jun 2025 10:05:12 +0200 Subject: [PATCH] A `SerialiseKey` instance for `Void` --- src/Database/LSMTree/Internal/Serialise/Class.hs | 10 ++++++---- src/Database/LSMTree/Internal/Types.hs | 3 +++ 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/Database/LSMTree/Internal/Serialise/Class.hs b/src/Database/LSMTree/Internal/Serialise/Class.hs index 75d73f6c0..c7859ed56 100644 --- a/src/Database/LSMTree/Internal/Serialise/Class.hs +++ b/src/Database/LSMTree/Internal/Serialise/Class.hs @@ -510,11 +510,13 @@ instance SerialiseValue P.ByteArray where Void -------------------------------------------------------------------------------} -{- | -This instance is intended for tables without blobs. +-- | The implementation of 'deserialiseKey' throws an exception. +instance SerialiseKey Void where + serialiseKey = absurd + deserialiseKey = error "deserialiseKey: cannot deserialise into Void" -The implementation of @'deserialiseValue'@ throws an excepValuen. --} + +-- | The implementation of 'deserialiseValue' throws an exception. instance SerialiseValue Void where serialiseValue = absurd deserialiseValue = error "deserialiseValue: cannot deserialise into Void" diff --git a/src/Database/LSMTree/Internal/Types.hs b/src/Database/LSMTree/Internal/Types.hs index ca8031cef..0d7db7131 100644 --- a/src/Database/LSMTree/Internal/Types.hs +++ b/src/Database/LSMTree/Internal/Types.hs @@ -19,6 +19,7 @@ import Control.DeepSeq (NFData (..), deepseq) import Data.Kind (Type) import Data.Semigroup (Sum) import Data.Typeable +import Data.Void (Void) import Data.Word (Word64) import qualified Database.LSMTree.Internal.BlobRef as Unsafe import Database.LSMTree.Internal.RawBytes (RawBytes (..)) @@ -225,4 +226,6 @@ instance ResolveValue (ResolveAsFirst v) where resolveSerialised :: Proxy (ResolveAsFirst v) -> RawBytes -> RawBytes -> RawBytes resolveSerialised _p = const +deriving via ResolveViaSemigroup Void instance ResolveValue Void + deriving via (ResolveViaSemigroup (Sum v)) instance (Num v, SerialiseValue v) => ResolveValue (Sum v)