{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE UndecidableInstances #-} {-# LANGUAGE TypeInType #-} {-# LANGUAGE TypeOperators #-} module Data.Stuffed.Internal (IsByte) where import Prelude import GHC.TypeLits (CmpNat, ErrorMessage (..), KnownNat, TypeError) import GHC.Types (Nat) type IsByte a = (KnownNat a, IsByteLT a (CmpNat a 256) ~ 'True) type family IsByteLT (n :: Nat) x where IsByteLT _ 'LT = 'True IsByteLT n _ = TypeError ('Text "Stuffed can be parametrized only on bytes" ':$$: 'Text "(" ':<>: 'ShowType n ':<>: 'Text " is not within range [0, 255]" )