blob: a994e909a9eb43aff91ac6f7dc2e208d2aa861a9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
module Coolbal.DataVersionTag where
import Data.Binary
import GHC.TypeNats
data DataVersionTag (n :: Nat) = DataVersionTag
deriving (Show, Eq, Ord)
instance (KnownNat n, n <= 255) => Binary (DataVersionTag n) where
put v = putWord8 (fromIntegral (natVal v))
get = do
b <- getWord8
let result = DataVersionTag :: DataVersionTag n
if b == fromIntegral (natVal result)
then return result
else fail ("DataVersionTag: read version " ++ show b ++ ", application expects version " ++ show (natVal result))
|