mlabs-haskell / lambda-buffers

LambdaBuffers toolkit for sharing types and their semantics between different languages
https://mlabs-haskell.github.io/lambda-buffers/
Apache License 2.0
29 stars 0 forks source link

Discuss: PlutusData meaning for Prelude types #228

Open bladyjoker opened 3 months ago

bladyjoker commented 3 months ago

What is PlutusData (toData and fromData) meaning for all Prelude types?

https://github.com/mlabs-haskell/lambda-buffers/blob/26adebd13cb97900cec7fe66cb1dd11977ba77ed/libs/lbf-plutus/Plutus/V1.lbf#L15

-- Instances for Prelude types
-- TODO(bladyjoker): Add other Prelude types (Text, Bytes etc.)?
instance PlutusData Bool
instance PlutusData Integer
instance PlutusData (Maybe a) :- PlutusData a
instance PlutusData (List a) :- PlutusData a
instance PlutusData (Either a b) :- PlutusData a, PlutusData b

These are obvious, but we could theoretically define PlutusData for Prelude Char/Text/Bytes/Map/Set.

Gergely's Rust backend already implements some notion of PlutusData for these types.

Should we complete this?

bladyjoker commented 3 months ago

Options:

Remove Plutus Map and Bytes

Do we need them. For offchain backends like Rust, it doesn't really matter, so we could remove these and just define PlutusData semantics for Prelude Map and Bytes.

For onchain, Plutarch and PlutusTx, I think the same could apply. The codegen configs are separate and they can map Prelude types to equivalent Plutus types.