Network.Ethereum.Web3.Solidity.Size
- Package
- purescript-web3
- Repository
- f-o-a-m/purescript-web3
#D0 Source
data D0 :: Digit
Instances
KnownDigit D0
IncD D0 D1 False
IncD D9 D0 True
IntSize (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 :: Digit
Instances
KnownDigit D1
IncD D0 D1 False
IncD D1 D2 False
IntSize (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 :: Digit
Instances
KnownDigit D2
IncD D1 D2 False
IncD D2 D3 False
IntSize (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 :: Digit
Instances
KnownDigit D3
IncD D2 D3 False
IncD D3 D4 False
IntSize (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 :: Digit
Instances
KnownDigit D4
IncD D3 D4 False
IncD D4 D5 False
IntSize (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 :: Digit
Instances
KnownDigit D6
IncD D5 D6 False
IncD D6 D7 False
IntSize (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 :: Digit
Instances
KnownDigit D8
IncD D7 D8 False
IncD D8 D9 False
IntSize (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 -> DigitList
Instances
DigitCount (DOne a)
(KnownDigit head) => KnownSize (DOne head)
(IncD d dInc dCarry) => IncP (DOne d) (DOne dInc) dCarry
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 (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 -> DigitList
Instances
(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 carryOut
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 (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) where
Members
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 -> output
This 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 :: Type
Digit
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 :: Type
As 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 carry
Instances
(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) where
Members
digitCount :: DLProxy d -> Int
Given 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