The typeReps function retrieves all the type representations found while traversing the data given as parameter.
CAUTION: for newtypes, do not use 'deriving newtype (HasTypeReps)' to derive
instances, rather use 'deriving anyclass (HasTypeReps)'.
This is because we use these instances in abstractSize, and for that
we prefer to have the newtype wrapper type available for "costing".
The difference between newtype and anyclass instances is as follows:
newtype Hash = Hash { unHash :: Int } deriving newtype (..., HasTypeReps) > typeReps someHash = Seq.fromList [Int] vs newtype Hash = Hash { unHash :: Int } deriving stock (...,Generics); deriving anyclass (HasTypeReps) > typeReps someHash = Seq.fromList [Hash, Int]
Examples:
typeReps "a"fromList [[Char],Char]
typeReps "ab"fromList [[Char],Char,Char]
typeReps ([] :: [Int])fromList [[Int]]
:set -XDeriveGenericimport GHC.Generics (Generic)data Foo = Foo [Int] (Char, Char) deriving (Generic)instance HasTypeReps FootypeReps $ Foo [1, 2] ('a', 'b')fromList [Foo,[Int],Int,Int,(Char,Char),Char,Char]
Instances54HasTypeReps, …
HasTypeReps AddrDefined in byron-spec-ledger-1.1.0.1 · Byron.Spec.Ledger.CoreHasTypeReps BlockCountDefined in byron-spec-ledger-1.1.0.1 · Byron.Spec.Ledger.CoreHasTypeReps EpochDefined in byron-spec-ledger-1.1.0.1 · Byron.Spec.Ledger.CoreHasTypeReps HashDefined in byron-spec-ledger-1.1.0.1 · Byron.Spec.Ledger.CoreHasTypeReps KeyPairDefined in byron-spec-ledger-1.1.0.1 · Byron.Spec.Ledger.CoreHasTypeReps LovelaceDefined in byron-spec-ledger-1.1.0.1 · Byron.Spec.Ledger.CoreHasTypeReps OwnerDefined in byron-spec-ledger-1.1.0.1 · Byron.Spec.Ledger.CoreHasTypeReps SKeyDefined in byron-spec-ledger-1.1.0.1 · Byron.Spec.Ledger.CoreHasTypeReps SlotDefined in byron-spec-ledger-1.1.0.1 · Byron.Spec.Ledger.CoreHasTypeReps SlotCountDefined in byron-spec-ledger-1.1.0.1 · Byron.Spec.Ledger.CoreHasTypeReps VKeyDefined in byron-spec-ledger-1.1.0.1 · Byron.Spec.Ledger.CoreHasTypeReps VKeyGenesisDefined in byron-spec-ledger-1.1.0.1 · Byron.Spec.Ledger.CoreHasTypeReps DCertDefined in byron-spec-ledger-1.1.0.1 · Byron.Spec.Ledger.DelegationHasTypeReps TxDefined in byron-spec-ledger-1.1.0.1 · Byron.Spec.Ledger.UTxOHasTypeReps TxBodyDefined in byron-spec-ledger-1.1.0.1 · Byron.Spec.Ledger.UTxOHasTypeReps TxIdDefined in byron-spec-ledger-1.1.0.1 · Byron.Spec.Ledger.UTxOHasTypeReps TxInDefined in byron-spec-ledger-1.1.0.1 · Byron.Spec.Ledger.UTxOHasTypeReps TxOutDefined in byron-spec-ledger-1.1.0.1 · Byron.Spec.Ledger.UTxOHasTypeReps WitDefined in byron-spec-ledger-1.1.0.1 · Byron.Spec.Ledger.UTxOHasTypeReps ApNameDefined in byron-spec-ledger-1.1.0.1 · Byron.Spec.Ledger.UpdateHasTypeReps ApVerDefined in byron-spec-ledger-1.1.0.1 · Byron.Spec.Ledger.UpdateHasTypeReps BkSgnCntTDefined in byron-spec-ledger-1.1.0.1 · Byron.Spec.Ledger.UpdateHasTypeReps FactorADefined in byron-spec-ledger-1.1.0.1 · Byron.Spec.Ledger.UpdateHasTypeReps FactorBDefined in byron-spec-ledger-1.1.0.1 · Byron.Spec.Ledger.UpdateHasTypeReps MetadataDefined in byron-spec-ledger-1.1.0.1 · Byron.Spec.Ledger.UpdateHasTypeReps PParamsDefined in byron-spec-ledger-1.1.0.1 · Byron.Spec.Ledger.UpdateHasTypeReps ProtVerDefined in byron-spec-ledger-1.1.0.1 · Byron.Spec.Ledger.UpdateHasTypeReps SwVerDefined in byron-spec-ledger-1.1.0.1 · Byron.Spec.Ledger.UpdateHasTypeReps UPropDefined in byron-spec-ledger-1.1.0.1 · Byron.Spec.Ledger.UpdateHasTypeReps UpAdptThdDefined in byron-spec-ledger-1.1.0.1 · Byron.Spec.Ledger.UpdateHasTypeReps UpIdDefined in byron-spec-ledger-1.1.0.1 · Byron.Spec.Ledger.UpdateHasTypeReps VoteDefined in byron-spec-ledger-1.1.0.1 · Byron.Spec.Ledger.UpdateHasTypeReps ShortHashDefined in byron-spec-ledger-1.1.0.1 · Data.AbstractSizeHasTypeReps IntegerDefined in byron-spec-ledger-1.1.0.1 · Data.AbstractSizeHasTypeReps NaturalDefined in byron-spec-ledger-1.1.0.1 · Data.AbstractSizeHasTypeReps BoolDefined in byron-spec-ledger-1.1.0.1 · Data.AbstractSizeHasTypeReps CharDefined in byron-spec-ledger-1.1.0.1 · Data.AbstractSizeHasTypeReps DoubleDefined in byron-spec-ledger-1.1.0.1 · Data.AbstractSizeHasTypeReps IntDefined in byron-spec-ledger-1.1.0.1 · Data.AbstractSizeHasTypeReps WordDefined in byron-spec-ledger-1.1.0.1 · Data.AbstractSizeHasTypeReps Word16Defined in byron-spec-ledger-1.1.0.1 · Data.AbstractSizeHasTypeReps Word32Defined in byron-spec-ledger-1.1.0.1 · Data.AbstractSizeHasTypeReps Word64Defined in byron-spec-ledger-1.1.0.1 · Data.AbstractSizeHasTypeReps Word8Defined in byron-spec-ledger-1.1.0.1 · Data.AbstractSizeHasTypeReps (VerKeyDSIGN MockDSIGN)Defined in byron-spec-ledger-1.1.0.1 · Data.AbstractSizeHasTypeReps (Digest SHA256)Defined in byron-spec-ledger-1.1.0.1 · Data.AbstractSizeTypeable a => HasTypeReps (Sig a)Defined in byron-spec-ledger-1.1.0.1 · Byron.Spec.Ledger.CoreWe need a custom instance here that returns only the top level type. A generic instance would have recursed into type
aand since we use typeReps to compute abstractSize, this would mean the size of 'Sig a' would include the size ofa(e.g.Tx). This would create an artificial coupling between the size of a type and it's "signature".(Typeable a, HasTypeReps a) => HasTypeReps (Set a)Defined in byron-spec-ledger-1.1.0.1 · Data.AbstractSize(Typeable a, HasTypeReps a) => HasTypeReps (Maybe a)Defined in byron-spec-ledger-1.1.0.1 · Data.AbstractSize(Typeable a, HasTypeReps a) => HasTypeReps [a]Defined in byron-spec-ledger-1.1.0.1 · Data.AbstractSizeHasTypeReps (SignedDSIGN MockDSIGN a)Defined in byron-spec-ledger-1.1.0.1 · Data.AbstractSizeTypeable a => HasTypeReps (Hash ShortHash a)Defined in byron-spec-ledger-1.1.0.1 · Data.AbstractSize(Typeable a, Typeable b, HasTypeReps a, HasTypeReps b) => HasTypeReps (a, b)Defined in byron-spec-ledger-1.1.0.1 · Data.AbstractSizeHasTypeReps (ProtVer, PParams, SwVer, Set STag, Metadata)Defined in byron-spec-ledger-1.1.0.1 · Byron.Spec.Ledger.Update