Network.Ethereum.Web3.Solidity.Size
- Package
- purescript-web3
- Repository
- f-o-a-m/purescript-web3
#D0 Source
data D0 :: DigitInstances
KnownDigit D0IncD D0 D1 FalseIncD D9 D0 TrueIntSize (DCons D4 (DOne D0))IntSize (DCons D8 (DOne D0))IntSize (DCons D1 (DCons D0 (DOne D4)))IntSize (DCons D1 (DCons D2 (DOne D0)))IntSize (DCons D1 (DCons D6 (DOne D0)))IntSize (DCons D2 (DCons D0 (DOne D0)))IntSize (DCons D2 (DCons D0 (DOne D8)))IntSize (DCons D2 (DCons D4 (DOne D0)))ByteSize (DCons D1 (DOne D0))ByteSize (DCons D2 (DOne D0))ByteSize (DCons D3 (DOne D0))
#D1 Source
data D1 :: DigitInstances
KnownDigit D1IncD D0 D1 FalseIncD D1 D2 FalseIntSize (DCons D1 (DOne D6))IntSize (DCons D1 (DCons D0 (DOne D4)))IntSize (DCons D1 (DCons D1 (DOne D2)))IntSize (DCons D1 (DCons D2 (DOne D0)))IntSize (DCons D1 (DCons D2 (DOne D8)))IntSize (DCons D1 (DCons D3 (DOne D6)))IntSize (DCons D1 (DCons D4 (DOne D4)))IntSize (DCons D1 (DCons D5 (DOne D2)))IntSize (DCons D1 (DCons D6 (DOne D0)))IntSize (DCons D1 (DCons D6 (DOne D8)))IntSize (DCons D1 (DCons D7 (DOne D6)))IntSize (DCons D1 (DCons D8 (DOne D4)))IntSize (DCons D1 (DCons D9 (DOne D2)))IntSize (DCons D2 (DCons D1 (DOne D6)))ByteSize (DOne D1)ByteSize (DCons D1 (DOne D0))ByteSize (DCons D1 (DOne D1))ByteSize (DCons D1 (DOne D2))ByteSize (DCons D1 (DOne D3))ByteSize (DCons D1 (DOne D4))ByteSize (DCons D1 (DOne D5))ByteSize (DCons D1 (DOne D6))ByteSize (DCons D1 (DOne D7))ByteSize (DCons D1 (DOne D8))ByteSize (DCons D1 (DOne D9))ByteSize (DCons D2 (DOne D1))ByteSize (DCons D3 (DOne D1))
#D2 Source
data D2 :: DigitInstances
KnownDigit D2IncD D1 D2 FalseIncD D2 D3 FalseIntSize (DCons D2 (DOne D4))IntSize (DCons D3 (DOne D2))IntSize (DCons D7 (DOne D2))IntSize (DCons D1 (DCons D1 (DOne D2)))IntSize (DCons D1 (DCons D2 (DOne D0)))IntSize (DCons D1 (DCons D2 (DOne D8)))IntSize (DCons D1 (DCons D5 (DOne D2)))IntSize (DCons D1 (DCons D9 (DOne D2)))IntSize (DCons D2 (DCons D0 (DOne D0)))IntSize (DCons D2 (DCons D0 (DOne D8)))IntSize (DCons D2 (DCons D1 (DOne D6)))IntSize (DCons D2 (DCons D2 (DOne D4)))IntSize (DCons D2 (DCons D3 (DOne D2)))IntSize (DCons D2 (DCons D4 (DOne D0)))IntSize (DCons D2 (DCons D4 (DOne D8)))IntSize (DCons D2 (DCons D5 (DOne D6)))ByteSize (DOne D2)ByteSize (DCons D1 (DOne D2))ByteSize (DCons D2 (DOne D0))ByteSize (DCons D2 (DOne D1))ByteSize (DCons D2 (DOne D2))ByteSize (DCons D2 (DOne D3))ByteSize (DCons D2 (DOne D4))ByteSize (DCons D2 (DOne D5))ByteSize (DCons D2 (DOne D6))ByteSize (DCons D2 (DOne D7))ByteSize (DCons D2 (DOne D8))ByteSize (DCons D2 (DOne D9))ByteSize (DCons D3 (DOne D2))
#D3 Source
data D3 :: DigitInstances
KnownDigit D3IncD D2 D3 FalseIncD D3 D4 FalseIntSize (DCons D3 (DOne D2))IntSize (DCons D1 (DCons D3 (DOne D6)))IntSize (DCons D2 (DCons D3 (DOne D2)))ByteSize (DOne D3)ByteSize (DCons D1 (DOne D3))ByteSize (DCons D2 (DOne D3))ByteSize (DCons D3 (DOne D0))ByteSize (DCons D3 (DOne D1))ByteSize (DCons D3 (DOne D2))
#D4 Source
data D4 :: DigitInstances
KnownDigit D4IncD D3 D4 FalseIncD D4 D5 FalseIntSize (DCons D2 (DOne D4))IntSize (DCons D4 (DOne D0))IntSize (DCons D4 (DOne D8))IntSize (DCons D6 (DOne D4))IntSize (DCons D1 (DCons D0 (DOne D4)))IntSize (DCons D1 (DCons D4 (DOne D4)))IntSize (DCons D1 (DCons D8 (DOne D4)))IntSize (DCons D2 (DCons D2 (DOne D4)))IntSize (DCons D2 (DCons D4 (DOne D0)))IntSize (DCons D2 (DCons D4 (DOne D8)))ByteSize (DOne D4)ByteSize (DCons D1 (DOne D4))ByteSize (DCons D2 (DOne D4))
#D6 Source
data D6 :: DigitInstances
KnownDigit D6IncD D5 D6 FalseIncD D6 D7 FalseIntSize (DCons D1 (DOne D6))IntSize (DCons D5 (DOne D6))IntSize (DCons D6 (DOne D4))IntSize (DCons D9 (DOne D6))IntSize (DCons D1 (DCons D3 (DOne D6)))IntSize (DCons D1 (DCons D6 (DOne D0)))IntSize (DCons D1 (DCons D6 (DOne D8)))IntSize (DCons D1 (DCons D7 (DOne D6)))IntSize (DCons D2 (DCons D1 (DOne D6)))IntSize (DCons D2 (DCons D5 (DOne D6)))ByteSize (DOne D6)ByteSize (DCons D1 (DOne D6))ByteSize (DCons D2 (DOne D6))
#D8 Source
data D8 :: DigitInstances
KnownDigit D8IncD D7 D8 FalseIncD D8 D9 FalseIntSize (DOne D8)IntSize (DCons D4 (DOne D8))IntSize (DCons D8 (DOne D0))IntSize (DCons D8 (DOne D8))IntSize (DCons D1 (DCons D2 (DOne D8)))IntSize (DCons D1 (DCons D6 (DOne D8)))IntSize (DCons D1 (DCons D8 (DOne D4)))IntSize (DCons D2 (DCons D0 (DOne D8)))IntSize (DCons D2 (DCons D4 (DOne D8)))ByteSize (DOne D8)ByteSize (DCons D1 (DOne D8))ByteSize (DCons D2 (DOne D8))
#type (:&) Source
Operator alias for Network.Ethereum.Web3.Solidity.Size.DCons (right-associative / precedence 6)
#type (:%) Source
Operator alias for Network.Ethereum.Web3.Solidity.Size.DTwo (right-associative / precedence 6)
#DOne Source
data DOne :: Digit -> DigitListInstances
DigitCount (DOne a)(KnownDigit head) => KnownSize (DOne head)(IncD d dInc dCarry) => IncP (DOne d) (DOne dInc) dCarryIntSize (DOne D8)IntSize (DCons D1 (DOne D6))IntSize (DCons D2 (DOne D4))IntSize (DCons D3 (DOne D2))IntSize (DCons D4 (DOne D0))IntSize (DCons D4 (DOne D8))IntSize (DCons D5 (DOne D6))IntSize (DCons D6 (DOne D4))IntSize (DCons D7 (DOne D2))IntSize (DCons D8 (DOne D0))IntSize (DCons D8 (DOne D8))IntSize (DCons D9 (DOne D6))IntSize (DCons D1 (DCons D0 (DOne D4)))IntSize (DCons D1 (DCons D1 (DOne D2)))IntSize (DCons D1 (DCons D2 (DOne D0)))IntSize (DCons D1 (DCons D2 (DOne D8)))IntSize (DCons D1 (DCons D3 (DOne D6)))IntSize (DCons D1 (DCons D4 (DOne D4)))IntSize (DCons D1 (DCons D5 (DOne D2)))IntSize (DCons D1 (DCons D6 (DOne D0)))IntSize (DCons D1 (DCons D6 (DOne D8)))IntSize (DCons D1 (DCons D7 (DOne D6)))IntSize (DCons D1 (DCons D8 (DOne D4)))IntSize (DCons D1 (DCons D9 (DOne D2)))IntSize (DCons D2 (DCons D0 (DOne D0)))IntSize (DCons D2 (DCons D0 (DOne D8)))IntSize (DCons D2 (DCons D1 (DOne D6)))IntSize (DCons D2 (DCons D2 (DOne D4)))IntSize (DCons D2 (DCons D3 (DOne D2)))IntSize (DCons D2 (DCons D4 (DOne D0)))IntSize (DCons D2 (DCons D4 (DOne D8)))IntSize (DCons D2 (DCons D5 (DOne D6)))ByteSize (DOne D1)ByteSize (DOne D2)ByteSize (DOne D3)ByteSize (DOne D4)ByteSize (DOne D5)ByteSize (DOne D6)ByteSize (DOne D7)ByteSize (DOne D8)ByteSize (DOne D9)ByteSize (DCons D1 (DOne D0))ByteSize (DCons D1 (DOne D1))ByteSize (DCons D1 (DOne D2))ByteSize (DCons D1 (DOne D3))ByteSize (DCons D1 (DOne D4))ByteSize (DCons D1 (DOne D5))ByteSize (DCons D1 (DOne D6))ByteSize (DCons D1 (DOne D7))ByteSize (DCons D1 (DOne D8))ByteSize (DCons D1 (DOne D9))ByteSize (DCons D2 (DOne D0))ByteSize (DCons D2 (DOne D1))ByteSize (DCons D2 (DOne D2))ByteSize (DCons D2 (DOne D3))ByteSize (DCons D2 (DOne D4))ByteSize (DCons D2 (DOne D5))ByteSize (DCons D2 (DOne D6))ByteSize (DCons D2 (DOne D7))ByteSize (DCons D2 (DOne D8))ByteSize (DCons D2 (DOne D9))ByteSize (DCons D3 (DOne D0))ByteSize (DCons D3 (DOne D1))ByteSize (DCons D3 (DOne D2))
#DCons Source
data DCons :: Digit -> DigitList -> DigitListInstances
(DigitCount rest) => DigitCount (DCons a rest)(DigitCount rest, KnownSize rest, KnownDigit a) => KnownSize (DCons a rest)(IncP rest restIncOut restIncTrue, IncD a aInc aCarry, If restIncTrue (BProxy aCarry) (BProxy False) (BProxy carryOut), If restIncTrue (DLProxy (DCons aInc restIncOut)) (DLProxy (DCons a restIncOut)) (DLProxy out)) => IncP (DCons a rest) out carryOutIntSize (DCons D1 (DOne D6))IntSize (DCons D2 (DOne D4))IntSize (DCons D3 (DOne D2))IntSize (DCons D4 (DOne D0))IntSize (DCons D4 (DOne D8))IntSize (DCons D5 (DOne D6))IntSize (DCons D6 (DOne D4))IntSize (DCons D7 (DOne D2))IntSize (DCons D8 (DOne D0))IntSize (DCons D8 (DOne D8))IntSize (DCons D9 (DOne D6))IntSize (DCons D1 (DCons D0 (DOne D4)))IntSize (DCons D1 (DCons D1 (DOne D2)))IntSize (DCons D1 (DCons D2 (DOne D0)))IntSize (DCons D1 (DCons D2 (DOne D8)))IntSize (DCons D1 (DCons D3 (DOne D6)))IntSize (DCons D1 (DCons D4 (DOne D4)))IntSize (DCons D1 (DCons D5 (DOne D2)))IntSize (DCons D1 (DCons D6 (DOne D0)))IntSize (DCons D1 (DCons D6 (DOne D8)))IntSize (DCons D1 (DCons D7 (DOne D6)))IntSize (DCons D1 (DCons D8 (DOne D4)))IntSize (DCons D1 (DCons D9 (DOne D2)))IntSize (DCons D2 (DCons D0 (DOne D0)))IntSize (DCons D2 (DCons D0 (DOne D8)))IntSize (DCons D2 (DCons D1 (DOne D6)))IntSize (DCons D2 (DCons D2 (DOne D4)))IntSize (DCons D2 (DCons D3 (DOne D2)))IntSize (DCons D2 (DCons D4 (DOne D0)))IntSize (DCons D2 (DCons D4 (DOne D8)))IntSize (DCons D2 (DCons D5 (DOne D6)))ByteSize (DCons D1 (DOne D0))ByteSize (DCons D1 (DOne D1))ByteSize (DCons D1 (DOne D2))ByteSize (DCons D1 (DOne D3))ByteSize (DCons D1 (DOne D4))ByteSize (DCons D1 (DOne D5))ByteSize (DCons D1 (DOne D6))ByteSize (DCons D1 (DOne D7))ByteSize (DCons D1 (DOne D8))ByteSize (DCons D1 (DOne D9))ByteSize (DCons D2 (DOne D0))ByteSize (DCons D2 (DOne D1))ByteSize (DCons D2 (DOne D2))ByteSize (DCons D2 (DOne D3))ByteSize (DCons D2 (DOne D4))ByteSize (DCons D2 (DOne D5))ByteSize (DCons D2 (DOne D6))ByteSize (DCons D2 (DOne D7))ByteSize (DCons D2 (DOne D8))ByteSize (DCons D2 (DOne D9))ByteSize (DCons D3 (DOne D0))ByteSize (DCons D3 (DOne D1))ByteSize (DCons D3 (DOne D2))
#KnownSize Source
class KnownSize (d :: DigitList) whereMembers
Instances
(KnownDigit head) => KnownSize (DOne head)(DigitCount rest, KnownSize rest, KnownDigit a) => KnownSize (DCons a rest)
#DLProxy Source
data DLProxy (d :: DigitList)For types of kind Type there is already Type.Proxy.
this is basicity the same thing but for types of kind DigitList.
Documentation of Type.Proxy module has motivation for why would
one need a Proxy for some type which we will not cover here.
Constructors
#IntSize Source
class (KnownSize n) <= IntSize n IntSize is empty class, if there is instance of IntSize for some number it means there
is solidity type int of that size specific number in like int16, int24 ... int256
Instances
IntSize (DOne D8)IntSize (DCons D1 (DOne D6))IntSize (DCons D2 (DOne D4))IntSize (DCons D3 (DOne D2))IntSize (DCons D4 (DOne D0))IntSize (DCons D4 (DOne D8))IntSize (DCons D5 (DOne D6))IntSize (DCons D6 (DOne D4))IntSize (DCons D7 (DOne D2))IntSize (DCons D8 (DOne D0))IntSize (DCons D8 (DOne D8))IntSize (DCons D9 (DOne D6))IntSize (DCons D1 (DCons D0 (DOne D4)))IntSize (DCons D1 (DCons D1 (DOne D2)))IntSize (DCons D1 (DCons D2 (DOne D0)))IntSize (DCons D1 (DCons D2 (DOne D8)))IntSize (DCons D1 (DCons D3 (DOne D6)))IntSize (DCons D1 (DCons D4 (DOne D4)))IntSize (DCons D1 (DCons D5 (DOne D2)))IntSize (DCons D1 (DCons D6 (DOne D0)))IntSize (DCons D1 (DCons D6 (DOne D8)))IntSize (DCons D1 (DCons D7 (DOne D6)))IntSize (DCons D1 (DCons D8 (DOne D4)))IntSize (DCons D1 (DCons D9 (DOne D2)))IntSize (DCons D2 (DCons D0 (DOne D0)))IntSize (DCons D2 (DCons D0 (DOne D8)))IntSize (DCons D2 (DCons D1 (DOne D6)))IntSize (DCons D2 (DCons D2 (DOne D4)))IntSize (DCons D2 (DCons D3 (DOne D2)))IntSize (DCons D2 (DCons D4 (DOne D0)))IntSize (DCons D2 (DCons D4 (DOne D8)))IntSize (DCons D2 (DCons D5 (DOne D6)))
#ByteSize Source
class (KnownSize n) <= ByteSize n ByteSize is empty class, if there is instance of ByteSize for some number it means there
is solidity type bytes of that size specific number in like bytes1, bytes2 ... bytes32
Instances
ByteSize (DOne D1)ByteSize (DOne D2)ByteSize (DOne D3)ByteSize (DOne D4)ByteSize (DOne D5)ByteSize (DOne D6)ByteSize (DOne D7)ByteSize (DOne D8)ByteSize (DOne D9)ByteSize (DCons D1 (DOne D0))ByteSize (DCons D1 (DOne D1))ByteSize (DCons D1 (DOne D2))ByteSize (DCons D1 (DOne D3))ByteSize (DCons D1 (DOne D4))ByteSize (DCons D1 (DOne D5))ByteSize (DCons D1 (DOne D6))ByteSize (DCons D1 (DOne D7))ByteSize (DCons D1 (DOne D8))ByteSize (DCons D1 (DOne D9))ByteSize (DCons D2 (DOne D0))ByteSize (DCons D2 (DOne D1))ByteSize (DCons D2 (DOne D2))ByteSize (DCons D2 (DOne D3))ByteSize (DCons D2 (DOne D4))ByteSize (DCons D2 (DOne D5))ByteSize (DCons D2 (DOne D6))ByteSize (DCons D2 (DOne D7))ByteSize (DCons D2 (DOne D8))ByteSize (DCons D2 (DOne D9))ByteSize (DCons D3 (DOne D0))ByteSize (DCons D3 (DOne D1))ByteSize (DCons D3 (DOne D2))
#Inc Source
class Inc (input :: DigitList) (output :: DigitList) | input -> outputThis is like inc but in type-level for DigitList, it computes
increment of it's input. It could be used like this for example:
cons :: forall a n nInc. Inc n nInc => a -> Vector n a -> Vector nInc a
uncons :: forall a n nDec. Inc nDec n => Vector n a -> { head :: a, tail :: Vector nDec a }
see Network.Ethereum.Web3.Solidity.Vector
Instances
#Digit Source
data Digit :: TypeDigit is a new Kind used to represent digits in base 10 counting system.
Alongside this kind we have types D0, D1 ... D9, which have kind Digit.
This two parts conceptually translate to this sum type:
We could represent all digits used in base 10 counting counting system like this:
data Digit = D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 | D8 | D9
here Digit has kind Type and D0, D1 ... are values of type Digit,
to be able to represent this digits in type-level we need to have distinct
types for each such value when we just have one Digit for all of them.
We could create empty types for each digit like data Void.
But they will have kind Type and it's not good as one could
use them incorrectly. for example this will compile:
data D1
data D2
....
data D9
x :: Array D1
x = []
It compiles as Array kas kind Type -> Type, i.e. it's type constructor,
it takes a Type and returns Type. We want such program to be rejected by compiler,
so to be more type-safe, we create new kind Digit, and our types representing digits,
will be of this kind instead of "default" kind Type.
foreign import kind Digit
foreign import data D0 :: Digit
foreign import data D2 :: Digit
....
foreign import data D3 :: Digit
now you can't have x :: Array D3 will not compile at all.
#DigitList Source
data DigitList :: TypeAs we have kind Digit we introduce kind DigitList for list of digits.
in value level this could be represented as:
data DigitList = DCons Digit DigitList | DOne Digit
Note: you can't have empty list here as terminal node takes a Digit.
the builtin Array in purescript could be defined like this
foreign import data Array ∷ Type -> Type
Similarly we are defining DCons and DOne, but with kinds we have defined already:
foreign import data DCons ∷ Digit -> DigitList -> DigitList
foreign import data DOne ∷ Digit -> DigitList
Now we can represent number 1995 in type-level like this:
type MyNum = DCons D1 (DCons D9 (DCons D9 (DOne D5)))
Yes it's too verbose, that's why we have type-level operator :& for DCons
like : for Cons of List.
infixr 6 type DCons as :&
type MyNum = D1 :& D9 :& D9 :& DOne D5
the _ :& DOne _ part is a bit annoying, so we fix it with a new type alisa for such
types and an operator for it :%:
type DTwo d1 d2 = d1 :& DOne d2
infixr 6 type DTwo as :%
type MyNum = D1 :& D9 :& D9 :% D5
Nice and sweet.
Note in typeclass instances type aliases can't be used, which DTwo and :% are.
so this will not compile instance myInstance :: SomeCls (D1 :% D0)
instead it should be written as instance myInstance :: SomeCls (D1 :& DOne D0)
#IncP Source
class IncP (input :: DigitList) (output :: DigitList) (carry :: Boolean) | input -> output carryInstances
(IncD d dInc dCarry) => IncP (DOne d) (DOne dInc) dCarry(IncP rest restIncOut restIncTrue, IncD a aInc aCarry, If restIncTrue (BProxy aCarry) (BProxy False) (BProxy carryOut), If restIncTrue (DLProxy (DCons aInc restIncOut)) (DLProxy (DCons a restIncOut)) (DLProxy out)) => IncP (DCons a rest) out carryOut
#KnownDigit Source
#DigitCount Source
class DigitCount (d :: DigitList) whereMembers
digitCount :: DLProxy d -> IntGiven proxy of a DigitList returns number of digits in the list.
Instances
DigitCount (DOne a)(DigitCount rest) => DigitCount (DCons a rest)
- Modules
- Network.
Ethereum. Web3 - Network.
Ethereum. Web3. Api - Network.
Ethereum. Web3. Contract - Network.
Ethereum. Web3. Contract. Internal - Network.
Ethereum. Web3. JsonRPC - Network.
Ethereum. Web3. Solidity - Network.
Ethereum. Web3. Solidity. AbiEncoding - Network.
Ethereum. Web3. Solidity. Bytes - Network.
Ethereum. Web3. Solidity. EncodingType - Network.
Ethereum. Web3. Solidity. Event - Network.
Ethereum. Web3. Solidity. Generic - Network.
Ethereum. Web3. Solidity. Int - Network.
Ethereum. Web3. Solidity. Size - Network.
Ethereum. Web3. Solidity. Sizes - Network.
Ethereum. Web3. Solidity. Tuple - Network.
Ethereum. Web3. Solidity. UInt - Network.
Ethereum. Web3. Solidity. Vector - Network.
Ethereum. Web3. Types - Network.
Ethereum. Web3. Types. EtherUnit - Network.
Ethereum. Web3. Types. Provider - Network.
Ethereum. Web3. Types. TokenUnit - Network.
Ethereum. Web3. Types. Types
Given proxy of a Digit returns a number it represents