-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | SCALE v2.0 codec for Haskell Web3 library. -- -- Client library for Third Generation of Web. @package scale @version 1.0.0.0 module Codec.Scale.Class -- | A class for encoding datatypes to SCALE format. -- -- If your compiler has support for the DeriveGeneric and -- DefaultSignatures language extensions (ghc >= -- 7.2.1), the put method will have default generic -- implementations. -- -- To use this option, simply add a deriving Generic -- clause to your datatype and declare a Encode instance for it -- without giving a definition for put. class Encode a put :: Encode a => Putter a put :: (Encode a, Generic a, Rep a ~ rep, GEncode rep) => Putter a -- | A class for encoding generically composed datatypes to SCALE format. class GEncode a gPut :: GEncode a => Putter a -- | A class for decoding datatypes from SCALE format. -- -- If your compiler has support for the DeriveGeneric and -- DefaultSignatures language extensions (ghc >= -- 7.2.1), the get method will have default generic -- implementations. -- -- To use this option, simply add a deriving Generic -- clause to your datatype and declare a Decode instance for it -- without giving a definition for get. class Decode a get :: Decode a => Get a get :: (Decode a, Generic a, Rep a ~ rep, GDecode rep) => Get a -- | A class for decoding generically composed datatypes from SCALE format. class GDecode a gGet :: GDecode a => Get a -- | Efficient general integer codec. module Codec.Scale.Compact -- | A "compact" or general integer encoding is sufficient for encoding -- large integers (up to 2**536) and is more efficient at encoding most -- values than the fixed-width version. newtype Compact a Compact :: a -> Compact a [unCompact] :: Compact a -> a instance GHC.Classes.Ord a => GHC.Classes.Ord (Codec.Scale.Compact.Compact a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Codec.Scale.Compact.Compact a) instance GHC.Show.Show a => GHC.Show.Show (Codec.Scale.Compact.Compact a) instance GHC.Real.Integral a => Codec.Scale.Class.Encode (Codec.Scale.Compact.Compact a) instance GHC.Real.Integral a => Codec.Scale.Class.Decode (Codec.Scale.Compact.Compact a) -- | This module defines generic codec instances for data structures -- (including tuples) and enums (tagged-unions in Rust). module Codec.Scale.Generic instance forall k (as :: [[k]]) (a :: [k]). Codec.Scale.Generic.EnumParser as => Codec.Scale.Generic.EnumParser (a : as) instance Codec.Scale.Generic.EnumParser '[] instance forall k (f :: k -> *) (xs :: [k]) (ys :: [k]) (xss :: [[k]]). (Codec.Scale.Class.GDecode (Data.SOP.NP.NP f xs), Codec.Scale.Class.GDecode (Data.SOP.NP.NP f ys), Data.SOP.Constraint.All (Data.SOP.Constraint.Compose Codec.Scale.Class.GDecode (Data.SOP.NP.NP f)) xss, Codec.Scale.Generic.EnumParser xss) => Codec.Scale.Class.GDecode (Data.SOP.NS.SOP f (xs : ys : xss)) instance forall k (f :: k -> *) (xs :: [k]) (ys :: [k]) (xss :: [[k]]). (Codec.Scale.Class.GEncode (Data.SOP.NP.NP f xs), Codec.Scale.Class.GEncode (Data.SOP.NP.NP f ys), Data.SOP.Constraint.All (Data.SOP.Constraint.Compose Codec.Scale.Class.GEncode (Data.SOP.NP.NP f)) xss) => Codec.Scale.Class.GEncode (Data.SOP.NS.SOP f (xs : ys : xss)) instance forall k (f :: k -> *) (xs :: [k]). Codec.Scale.Class.GEncode (Data.SOP.NP.NP f xs) => Codec.Scale.Class.GEncode (Data.SOP.NS.SOP f '[xs]) instance (Codec.Scale.Class.Encode a, Codec.Scale.Class.GEncode (Data.SOP.NP.NP Data.SOP.BasicFunctors.I as)) => Codec.Scale.Class.GEncode (Data.SOP.NP.NP Data.SOP.BasicFunctors.I (a : as)) instance Codec.Scale.Class.GEncode (Data.SOP.NP.NP Data.SOP.BasicFunctors.I '[]) instance forall k (f :: k -> *) (as :: [k]). Codec.Scale.Class.GDecode (Data.SOP.NP.NP f as) => Codec.Scale.Class.GDecode (Data.SOP.NS.SOP f '[as]) instance (Codec.Scale.Class.Decode a, Codec.Scale.Class.GDecode (Data.SOP.NP.NP Data.SOP.BasicFunctors.I as)) => Codec.Scale.Class.GDecode (Data.SOP.NP.NP Data.SOP.BasicFunctors.I (a : as)) instance Codec.Scale.Class.GDecode (Data.SOP.NP.NP Data.SOP.BasicFunctors.I '[]) -- | This type helps to encode/decode singleton Rust enums like: `enum Enum -- { Data { some_data: u32 } }` module Codec.Scale.SingletonEnum -- | Haskell don't permit to make Rust-like enum type with only one -- element. For this reason it is impossible to make generic parser for -- singleton enum type. This type helps to parse Rust encoded singleton -- enums. newtype SingletonEnum a SingletonEnum :: a -> SingletonEnum a [unSingletonEnum] :: SingletonEnum a -> a instance Codec.Scale.Class.Encode a => Codec.Scale.Class.Encode (Codec.Scale.SingletonEnum.SingletonEnum a) instance Codec.Scale.Class.Decode a => Codec.Scale.Class.Decode (Codec.Scale.SingletonEnum.SingletonEnum a) -- | This type helps to skip fields in encoded data type. module Codec.Scale.Skip -- | This type hide filed from encoding context. It's useful in cases when -- serialization impossible or not needed. For decoding wrapped type -- should have Default instance. newtype Skip a Skip :: a -> Skip a [unSkip] :: Skip a -> a instance GHC.Show.Show a => GHC.Show.Show (Codec.Scale.Skip.Skip a) instance GHC.Classes.Ord a => GHC.Classes.Ord (Codec.Scale.Skip.Skip a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Codec.Scale.Skip.Skip a) instance Codec.Scale.Class.Encode (Codec.Scale.Skip.Skip a) instance Data.Default.Class.Default a => Codec.Scale.Class.Decode (Codec.Scale.Skip.Skip a) instance Data.Default.Class.Default a => Data.Default.Class.Default (Codec.Scale.Skip.Skip a) -- | It contains template haskell SCALE helper functions. module Codec.Scale.TH tupleInstances :: Int -> DecsQ -- | Particular core type instances. module Codec.Scale.Core -- | A "compact" or general integer encoding is sufficient for encoding -- large integers (up to 2**536) and is more efficient at encoding most -- values than the fixed-width version. newtype Compact a Compact :: a -> Compact a [unCompact] :: Compact a -> a instance (Codec.Scale.Class.Decode a1, Codec.Scale.Class.Decode a2) => Codec.Scale.Class.Decode (a1, a2) instance (Codec.Scale.Class.Encode a1, Codec.Scale.Class.Encode a2) => Codec.Scale.Class.Encode (a1, a2) instance (Codec.Scale.Class.Decode a1, Codec.Scale.Class.Decode a2, Codec.Scale.Class.Decode a3) => Codec.Scale.Class.Decode (a1, a2, a3) instance (Codec.Scale.Class.Encode a1, Codec.Scale.Class.Encode a2, Codec.Scale.Class.Encode a3) => Codec.Scale.Class.Encode (a1, a2, a3) instance (Codec.Scale.Class.Decode a1, Codec.Scale.Class.Decode a2, Codec.Scale.Class.Decode a3, Codec.Scale.Class.Decode a4) => Codec.Scale.Class.Decode (a1, a2, a3, a4) instance (Codec.Scale.Class.Encode a1, Codec.Scale.Class.Encode a2, Codec.Scale.Class.Encode a3, Codec.Scale.Class.Encode a4) => Codec.Scale.Class.Encode (a1, a2, a3, a4) instance (Codec.Scale.Class.Decode a1, Codec.Scale.Class.Decode a2, Codec.Scale.Class.Decode a3, Codec.Scale.Class.Decode a4, Codec.Scale.Class.Decode a5) => Codec.Scale.Class.Decode (a1, a2, a3, a4, a5) instance (Codec.Scale.Class.Encode a1, Codec.Scale.Class.Encode a2, Codec.Scale.Class.Encode a3, Codec.Scale.Class.Encode a4, Codec.Scale.Class.Encode a5) => Codec.Scale.Class.Encode (a1, a2, a3, a4, a5) instance (Codec.Scale.Class.Decode a1, Codec.Scale.Class.Decode a2, Codec.Scale.Class.Decode a3, Codec.Scale.Class.Decode a4, Codec.Scale.Class.Decode a5, Codec.Scale.Class.Decode a6) => Codec.Scale.Class.Decode (a1, a2, a3, a4, a5, a6) instance (Codec.Scale.Class.Encode a1, Codec.Scale.Class.Encode a2, Codec.Scale.Class.Encode a3, Codec.Scale.Class.Encode a4, Codec.Scale.Class.Encode a5, Codec.Scale.Class.Encode a6) => Codec.Scale.Class.Encode (a1, a2, a3, a4, a5, a6) instance (Codec.Scale.Class.Decode a1, Codec.Scale.Class.Decode a2, Codec.Scale.Class.Decode a3, Codec.Scale.Class.Decode a4, Codec.Scale.Class.Decode a5, Codec.Scale.Class.Decode a6, Codec.Scale.Class.Decode a7) => Codec.Scale.Class.Decode (a1, a2, a3, a4, a5, a6, a7) instance (Codec.Scale.Class.Encode a1, Codec.Scale.Class.Encode a2, Codec.Scale.Class.Encode a3, Codec.Scale.Class.Encode a4, Codec.Scale.Class.Encode a5, Codec.Scale.Class.Encode a6, Codec.Scale.Class.Encode a7) => Codec.Scale.Class.Encode (a1, a2, a3, a4, a5, a6, a7) instance (Codec.Scale.Class.Decode a1, Codec.Scale.Class.Decode a2, Codec.Scale.Class.Decode a3, Codec.Scale.Class.Decode a4, Codec.Scale.Class.Decode a5, Codec.Scale.Class.Decode a6, Codec.Scale.Class.Decode a7, Codec.Scale.Class.Decode a8) => Codec.Scale.Class.Decode (a1, a2, a3, a4, a5, a6, a7, a8) instance (Codec.Scale.Class.Encode a1, Codec.Scale.Class.Encode a2, Codec.Scale.Class.Encode a3, Codec.Scale.Class.Encode a4, Codec.Scale.Class.Encode a5, Codec.Scale.Class.Encode a6, Codec.Scale.Class.Encode a7, Codec.Scale.Class.Encode a8) => Codec.Scale.Class.Encode (a1, a2, a3, a4, a5, a6, a7, a8) instance (Codec.Scale.Class.Decode a1, Codec.Scale.Class.Decode a2, Codec.Scale.Class.Decode a3, Codec.Scale.Class.Decode a4, Codec.Scale.Class.Decode a5, Codec.Scale.Class.Decode a6, Codec.Scale.Class.Decode a7, Codec.Scale.Class.Decode a8, Codec.Scale.Class.Decode a9) => Codec.Scale.Class.Decode (a1, a2, a3, a4, a5, a6, a7, a8, a9) instance (Codec.Scale.Class.Encode a1, Codec.Scale.Class.Encode a2, Codec.Scale.Class.Encode a3, Codec.Scale.Class.Encode a4, Codec.Scale.Class.Encode a5, Codec.Scale.Class.Encode a6, Codec.Scale.Class.Encode a7, Codec.Scale.Class.Encode a8, Codec.Scale.Class.Encode a9) => Codec.Scale.Class.Encode (a1, a2, a3, a4, a5, a6, a7, a8, a9) instance (Codec.Scale.Class.Decode a1, Codec.Scale.Class.Decode a2, Codec.Scale.Class.Decode a3, Codec.Scale.Class.Decode a4, Codec.Scale.Class.Decode a5, Codec.Scale.Class.Decode a6, Codec.Scale.Class.Decode a7, Codec.Scale.Class.Decode a8, Codec.Scale.Class.Decode a9, Codec.Scale.Class.Decode a10) => Codec.Scale.Class.Decode (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) instance (Codec.Scale.Class.Encode a1, Codec.Scale.Class.Encode a2, Codec.Scale.Class.Encode a3, Codec.Scale.Class.Encode a4, Codec.Scale.Class.Encode a5, Codec.Scale.Class.Encode a6, Codec.Scale.Class.Encode a7, Codec.Scale.Class.Encode a8, Codec.Scale.Class.Encode a9, Codec.Scale.Class.Encode a10) => Codec.Scale.Class.Encode (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) instance (Codec.Scale.Class.Decode a1, Codec.Scale.Class.Decode a2, Codec.Scale.Class.Decode a3, Codec.Scale.Class.Decode a4, Codec.Scale.Class.Decode a5, Codec.Scale.Class.Decode a6, Codec.Scale.Class.Decode a7, Codec.Scale.Class.Decode a8, Codec.Scale.Class.Decode a9, Codec.Scale.Class.Decode a10, Codec.Scale.Class.Decode a11) => Codec.Scale.Class.Decode (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) instance (Codec.Scale.Class.Encode a1, Codec.Scale.Class.Encode a2, Codec.Scale.Class.Encode a3, Codec.Scale.Class.Encode a4, Codec.Scale.Class.Encode a5, Codec.Scale.Class.Encode a6, Codec.Scale.Class.Encode a7, Codec.Scale.Class.Encode a8, Codec.Scale.Class.Encode a9, Codec.Scale.Class.Encode a10, Codec.Scale.Class.Encode a11) => Codec.Scale.Class.Encode (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) instance (Codec.Scale.Class.Decode a1, Codec.Scale.Class.Decode a2, Codec.Scale.Class.Decode a3, Codec.Scale.Class.Decode a4, Codec.Scale.Class.Decode a5, Codec.Scale.Class.Decode a6, Codec.Scale.Class.Decode a7, Codec.Scale.Class.Decode a8, Codec.Scale.Class.Decode a9, Codec.Scale.Class.Decode a10, Codec.Scale.Class.Decode a11, Codec.Scale.Class.Decode a12) => Codec.Scale.Class.Decode (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) instance (Codec.Scale.Class.Encode a1, Codec.Scale.Class.Encode a2, Codec.Scale.Class.Encode a3, Codec.Scale.Class.Encode a4, Codec.Scale.Class.Encode a5, Codec.Scale.Class.Encode a6, Codec.Scale.Class.Encode a7, Codec.Scale.Class.Encode a8, Codec.Scale.Class.Encode a9, Codec.Scale.Class.Encode a10, Codec.Scale.Class.Encode a11, Codec.Scale.Class.Encode a12) => Codec.Scale.Class.Encode (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) instance (Codec.Scale.Class.Decode a1, Codec.Scale.Class.Decode a2, Codec.Scale.Class.Decode a3, Codec.Scale.Class.Decode a4, Codec.Scale.Class.Decode a5, Codec.Scale.Class.Decode a6, Codec.Scale.Class.Decode a7, Codec.Scale.Class.Decode a8, Codec.Scale.Class.Decode a9, Codec.Scale.Class.Decode a10, Codec.Scale.Class.Decode a11, Codec.Scale.Class.Decode a12, Codec.Scale.Class.Decode a13) => Codec.Scale.Class.Decode (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) instance (Codec.Scale.Class.Encode a1, Codec.Scale.Class.Encode a2, Codec.Scale.Class.Encode a3, Codec.Scale.Class.Encode a4, Codec.Scale.Class.Encode a5, Codec.Scale.Class.Encode a6, Codec.Scale.Class.Encode a7, Codec.Scale.Class.Encode a8, Codec.Scale.Class.Encode a9, Codec.Scale.Class.Encode a10, Codec.Scale.Class.Encode a11, Codec.Scale.Class.Encode a12, Codec.Scale.Class.Encode a13) => Codec.Scale.Class.Encode (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) instance (Codec.Scale.Class.Decode a1, Codec.Scale.Class.Decode a2, Codec.Scale.Class.Decode a3, Codec.Scale.Class.Decode a4, Codec.Scale.Class.Decode a5, Codec.Scale.Class.Decode a6, Codec.Scale.Class.Decode a7, Codec.Scale.Class.Decode a8, Codec.Scale.Class.Decode a9, Codec.Scale.Class.Decode a10, Codec.Scale.Class.Decode a11, Codec.Scale.Class.Decode a12, Codec.Scale.Class.Decode a13, Codec.Scale.Class.Decode a14) => Codec.Scale.Class.Decode (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) instance (Codec.Scale.Class.Encode a1, Codec.Scale.Class.Encode a2, Codec.Scale.Class.Encode a3, Codec.Scale.Class.Encode a4, Codec.Scale.Class.Encode a5, Codec.Scale.Class.Encode a6, Codec.Scale.Class.Encode a7, Codec.Scale.Class.Encode a8, Codec.Scale.Class.Encode a9, Codec.Scale.Class.Encode a10, Codec.Scale.Class.Encode a11, Codec.Scale.Class.Encode a12, Codec.Scale.Class.Encode a13, Codec.Scale.Class.Encode a14) => Codec.Scale.Class.Encode (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) instance (Codec.Scale.Class.Decode a1, Codec.Scale.Class.Decode a2, Codec.Scale.Class.Decode a3, Codec.Scale.Class.Decode a4, Codec.Scale.Class.Decode a5, Codec.Scale.Class.Decode a6, Codec.Scale.Class.Decode a7, Codec.Scale.Class.Decode a8, Codec.Scale.Class.Decode a9, Codec.Scale.Class.Decode a10, Codec.Scale.Class.Decode a11, Codec.Scale.Class.Decode a12, Codec.Scale.Class.Decode a13, Codec.Scale.Class.Decode a14, Codec.Scale.Class.Decode a15) => Codec.Scale.Class.Decode (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) instance (Codec.Scale.Class.Encode a1, Codec.Scale.Class.Encode a2, Codec.Scale.Class.Encode a3, Codec.Scale.Class.Encode a4, Codec.Scale.Class.Encode a5, Codec.Scale.Class.Encode a6, Codec.Scale.Class.Encode a7, Codec.Scale.Class.Encode a8, Codec.Scale.Class.Encode a9, Codec.Scale.Class.Encode a10, Codec.Scale.Class.Encode a11, Codec.Scale.Class.Encode a12, Codec.Scale.Class.Encode a13, Codec.Scale.Class.Encode a14, Codec.Scale.Class.Encode a15) => Codec.Scale.Class.Encode (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) instance (Codec.Scale.Class.Decode a1, Codec.Scale.Class.Decode a2, Codec.Scale.Class.Decode a3, Codec.Scale.Class.Decode a4, Codec.Scale.Class.Decode a5, Codec.Scale.Class.Decode a6, Codec.Scale.Class.Decode a7, Codec.Scale.Class.Decode a8, Codec.Scale.Class.Decode a9, Codec.Scale.Class.Decode a10, Codec.Scale.Class.Decode a11, Codec.Scale.Class.Decode a12, Codec.Scale.Class.Decode a13, Codec.Scale.Class.Decode a14, Codec.Scale.Class.Decode a15, Codec.Scale.Class.Decode a16) => Codec.Scale.Class.Decode (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) instance (Codec.Scale.Class.Encode a1, Codec.Scale.Class.Encode a2, Codec.Scale.Class.Encode a3, Codec.Scale.Class.Encode a4, Codec.Scale.Class.Encode a5, Codec.Scale.Class.Encode a6, Codec.Scale.Class.Encode a7, Codec.Scale.Class.Encode a8, Codec.Scale.Class.Encode a9, Codec.Scale.Class.Encode a10, Codec.Scale.Class.Encode a11, Codec.Scale.Class.Encode a12, Codec.Scale.Class.Encode a13, Codec.Scale.Class.Encode a14, Codec.Scale.Class.Encode a15, Codec.Scale.Class.Encode a16) => Codec.Scale.Class.Encode (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) instance (Codec.Scale.Class.Decode a1, Codec.Scale.Class.Decode a2, Codec.Scale.Class.Decode a3, Codec.Scale.Class.Decode a4, Codec.Scale.Class.Decode a5, Codec.Scale.Class.Decode a6, Codec.Scale.Class.Decode a7, Codec.Scale.Class.Decode a8, Codec.Scale.Class.Decode a9, Codec.Scale.Class.Decode a10, Codec.Scale.Class.Decode a11, Codec.Scale.Class.Decode a12, Codec.Scale.Class.Decode a13, Codec.Scale.Class.Decode a14, Codec.Scale.Class.Decode a15, Codec.Scale.Class.Decode a16, Codec.Scale.Class.Decode a17) => Codec.Scale.Class.Decode (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17) instance (Codec.Scale.Class.Encode a1, Codec.Scale.Class.Encode a2, Codec.Scale.Class.Encode a3, Codec.Scale.Class.Encode a4, Codec.Scale.Class.Encode a5, Codec.Scale.Class.Encode a6, Codec.Scale.Class.Encode a7, Codec.Scale.Class.Encode a8, Codec.Scale.Class.Encode a9, Codec.Scale.Class.Encode a10, Codec.Scale.Class.Encode a11, Codec.Scale.Class.Encode a12, Codec.Scale.Class.Encode a13, Codec.Scale.Class.Encode a14, Codec.Scale.Class.Encode a15, Codec.Scale.Class.Encode a16, Codec.Scale.Class.Encode a17) => Codec.Scale.Class.Encode (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17) instance (Codec.Scale.Class.Decode a1, Codec.Scale.Class.Decode a2, Codec.Scale.Class.Decode a3, Codec.Scale.Class.Decode a4, Codec.Scale.Class.Decode a5, Codec.Scale.Class.Decode a6, Codec.Scale.Class.Decode a7, Codec.Scale.Class.Decode a8, Codec.Scale.Class.Decode a9, Codec.Scale.Class.Decode a10, Codec.Scale.Class.Decode a11, Codec.Scale.Class.Decode a12, Codec.Scale.Class.Decode a13, Codec.Scale.Class.Decode a14, Codec.Scale.Class.Decode a15, Codec.Scale.Class.Decode a16, Codec.Scale.Class.Decode a17, Codec.Scale.Class.Decode a18) => Codec.Scale.Class.Decode (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18) instance (Codec.Scale.Class.Encode a1, Codec.Scale.Class.Encode a2, Codec.Scale.Class.Encode a3, Codec.Scale.Class.Encode a4, Codec.Scale.Class.Encode a5, Codec.Scale.Class.Encode a6, Codec.Scale.Class.Encode a7, Codec.Scale.Class.Encode a8, Codec.Scale.Class.Encode a9, Codec.Scale.Class.Encode a10, Codec.Scale.Class.Encode a11, Codec.Scale.Class.Encode a12, Codec.Scale.Class.Encode a13, Codec.Scale.Class.Encode a14, Codec.Scale.Class.Encode a15, Codec.Scale.Class.Encode a16, Codec.Scale.Class.Encode a17, Codec.Scale.Class.Encode a18) => Codec.Scale.Class.Encode (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18) instance (Codec.Scale.Class.Decode a1, Codec.Scale.Class.Decode a2, Codec.Scale.Class.Decode a3, Codec.Scale.Class.Decode a4, Codec.Scale.Class.Decode a5, Codec.Scale.Class.Decode a6, Codec.Scale.Class.Decode a7, Codec.Scale.Class.Decode a8, Codec.Scale.Class.Decode a9, Codec.Scale.Class.Decode a10, Codec.Scale.Class.Decode a11, Codec.Scale.Class.Decode a12, Codec.Scale.Class.Decode a13, Codec.Scale.Class.Decode a14, Codec.Scale.Class.Decode a15, Codec.Scale.Class.Decode a16, Codec.Scale.Class.Decode a17, Codec.Scale.Class.Decode a18, Codec.Scale.Class.Decode a19) => Codec.Scale.Class.Decode (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19) instance (Codec.Scale.Class.Encode a1, Codec.Scale.Class.Encode a2, Codec.Scale.Class.Encode a3, Codec.Scale.Class.Encode a4, Codec.Scale.Class.Encode a5, Codec.Scale.Class.Encode a6, Codec.Scale.Class.Encode a7, Codec.Scale.Class.Encode a8, Codec.Scale.Class.Encode a9, Codec.Scale.Class.Encode a10, Codec.Scale.Class.Encode a11, Codec.Scale.Class.Encode a12, Codec.Scale.Class.Encode a13, Codec.Scale.Class.Encode a14, Codec.Scale.Class.Encode a15, Codec.Scale.Class.Encode a16, Codec.Scale.Class.Encode a17, Codec.Scale.Class.Encode a18, Codec.Scale.Class.Encode a19) => Codec.Scale.Class.Encode (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19) instance (Codec.Scale.Class.Decode a1, Codec.Scale.Class.Decode a2, Codec.Scale.Class.Decode a3, Codec.Scale.Class.Decode a4, Codec.Scale.Class.Decode a5, Codec.Scale.Class.Decode a6, Codec.Scale.Class.Decode a7, Codec.Scale.Class.Decode a8, Codec.Scale.Class.Decode a9, Codec.Scale.Class.Decode a10, Codec.Scale.Class.Decode a11, Codec.Scale.Class.Decode a12, Codec.Scale.Class.Decode a13, Codec.Scale.Class.Decode a14, Codec.Scale.Class.Decode a15, Codec.Scale.Class.Decode a16, Codec.Scale.Class.Decode a17, Codec.Scale.Class.Decode a18, Codec.Scale.Class.Decode a19, Codec.Scale.Class.Decode a20) => Codec.Scale.Class.Decode (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) instance (Codec.Scale.Class.Encode a1, Codec.Scale.Class.Encode a2, Codec.Scale.Class.Encode a3, Codec.Scale.Class.Encode a4, Codec.Scale.Class.Encode a5, Codec.Scale.Class.Encode a6, Codec.Scale.Class.Encode a7, Codec.Scale.Class.Encode a8, Codec.Scale.Class.Encode a9, Codec.Scale.Class.Encode a10, Codec.Scale.Class.Encode a11, Codec.Scale.Class.Encode a12, Codec.Scale.Class.Encode a13, Codec.Scale.Class.Encode a14, Codec.Scale.Class.Encode a15, Codec.Scale.Class.Encode a16, Codec.Scale.Class.Encode a17, Codec.Scale.Class.Encode a18, Codec.Scale.Class.Encode a19, Codec.Scale.Class.Encode a20) => Codec.Scale.Class.Encode (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) instance Codec.Scale.Class.Encode a => Codec.Scale.Class.Encode [a] instance Codec.Scale.Class.Decode a => Codec.Scale.Class.Decode [a] instance (Codec.Scale.Class.Encode a, Data.Vector.Unboxed.Base.Unbox a) => Codec.Scale.Class.Encode (Data.Vector.Unboxed.Base.Vector a) instance (Codec.Scale.Class.Decode a, Data.Vector.Unboxed.Base.Unbox a) => Codec.Scale.Class.Decode (Data.Vector.Unboxed.Base.Vector a) instance Codec.Scale.Class.Encode (Data.Vector.Unboxed.Base.Vector Data.Bit.Internal.Bit) instance Codec.Scale.Class.Decode (Data.Vector.Unboxed.Base.Vector Data.Bit.Internal.Bit) instance Codec.Scale.Class.Encode Data.ByteString.Internal.ByteString instance Codec.Scale.Class.Decode Data.ByteString.Internal.ByteString instance Codec.Scale.Class.Encode Data.Text.Internal.Text instance Codec.Scale.Class.Decode Data.Text.Internal.Text instance Codec.Scale.Class.Encode () instance Codec.Scale.Class.Decode () instance Codec.Scale.Class.Encode GHC.Types.Bool instance Codec.Scale.Class.Decode GHC.Types.Bool instance Codec.Scale.Class.Encode GHC.Word.Word8 instance Codec.Scale.Class.Decode GHC.Word.Word8 instance Codec.Scale.Class.Encode GHC.Word.Word16 instance Codec.Scale.Class.Decode GHC.Word.Word16 instance Codec.Scale.Class.Encode GHC.Word.Word32 instance Codec.Scale.Class.Decode GHC.Word.Word32 instance Codec.Scale.Class.Encode GHC.Word.Word64 instance Codec.Scale.Class.Decode GHC.Word.Word64 instance Codec.Scale.Class.Encode GHC.Int.Int8 instance Codec.Scale.Class.Decode GHC.Int.Int8 instance Codec.Scale.Class.Encode GHC.Int.Int16 instance Codec.Scale.Class.Decode GHC.Int.Int16 instance Codec.Scale.Class.Encode GHC.Int.Int32 instance Codec.Scale.Class.Decode GHC.Int.Int32 instance Codec.Scale.Class.Encode GHC.Int.Int64 instance Codec.Scale.Class.Decode GHC.Int.Int64 instance Codec.Scale.Class.Encode a => Codec.Scale.Class.Encode (GHC.Maybe.Maybe a) instance Codec.Scale.Class.Decode a => Codec.Scale.Class.Decode (GHC.Maybe.Maybe a) instance Codec.Scale.Class.Encode (GHC.Maybe.Maybe GHC.Types.Bool) instance Codec.Scale.Class.Decode (GHC.Maybe.Maybe GHC.Types.Bool) instance (Codec.Scale.Class.Encode a, Codec.Scale.Class.Encode b) => Codec.Scale.Class.Encode (Data.Either.Either a b) instance (Codec.Scale.Class.Decode a, Codec.Scale.Class.Decode b) => Codec.Scale.Class.Decode (Data.Either.Either a b) -- | The SCALE (Simple Concatenated Aggregate Little-Endian) Codec is a -- lightweight, efficient, binary serialization and deserialization -- codec. -- -- It is designed for high-performance, copy-free encoding and decoding -- of data in resource-constrained execution contexts, like the Substrate -- runtime. It is not self-describing in any way and assumes the decoding -- context has all type knowledge about the encoded data. module Codec.Scale -- | Encode datatype to SCALE format. encode :: (Encode a, ByteArray ba) => a -> ba -- | Decode datatype from SCALE format. decode :: (ByteArrayAccess ba, Decode a) => ba -> Either String a -- | Generic driven version of encode encode' :: (Generic a, Rep a ~ rep, GEncode rep, ByteArray ba) => a -> ba -- | Generic driven version of decode decode' :: (Generic a, Rep a ~ rep, GDecode rep, ByteArrayAccess ba) => ba -> Either String a -- | A class for encoding datatypes to SCALE format. -- -- If your compiler has support for the DeriveGeneric and -- DefaultSignatures language extensions (ghc >= -- 7.2.1), the put method will have default generic -- implementations. -- -- To use this option, simply add a deriving Generic -- clause to your datatype and declare a Encode instance for it -- without giving a definition for put. class Encode a -- | A class for decoding datatypes from SCALE format. -- -- If your compiler has support for the DeriveGeneric and -- DefaultSignatures language extensions (ghc >= -- 7.2.1), the get method will have default generic -- implementations. -- -- To use this option, simply add a deriving Generic -- clause to your datatype and declare a Decode instance for it -- without giving a definition for get. class Decode a -- | The class of representable datatypes. -- -- The SOP approach to generic programming is based on viewing datatypes -- as a representation (Rep) built from the sum of products of its -- components. The components of a datatype are specified using the -- Code type family. -- -- The isomorphism between the original Haskell datatype and its -- representation is witnessed by the methods of this class, from -- and to. So for instances of this class, the following laws -- should (in general) hold: -- --
--   to . from === id :: a -> a
--   from . to === id :: Rep a -> Rep a
--   
-- -- You typically don't define instances of this class by hand, but rather -- derive the class instance automatically. -- -- Option 1: Derive via the built-in GHC-generics. For this, you -- need to use the DeriveGeneric extension to first derive an -- instance of the Generic class from module GHC.Generics. -- With this, you can then give an empty instance for Generic, and -- the default definitions will just work. The pattern looks as follows: -- --
--   import qualified GHC.Generics as GHC
--   import Generics.SOP
--   
--   ...
--   
--   data T = ... deriving (GHC.Generic, ...)
--   
--   instance Generic T -- empty
--   instance HasDatatypeInfo T -- empty, if you want/need metadata
--   
-- -- Option 2: Derive via Template Haskell. For this, you need to -- enable the TemplateHaskell extension. You can then use -- deriveGeneric from module Generics.SOP.TH to have the -- instance generated for you. The pattern looks as follows: -- --
--   import Generics.SOP
--   import Generics.SOP.TH
--   
--   ...
--   
--   data T = ...
--   
--   deriveGeneric ''T -- derives HasDatatypeInfo as well
--   
-- -- Tradeoffs: Whether to use Option 1 or 2 is mainly a matter of -- personal taste. The version based on Template Haskell probably has -- less run-time overhead. -- -- Non-standard instances: It is possible to give Generic -- instances manually that deviate from the standard scheme, as long as -- at least -- --
--   to . from === id :: a -> a
--   
-- -- still holds. class All SListI :: [Type] -> Constraint Code a => Generic a