Re: Any reason why backed enums are limited to int and string only?
2021-03-31 20:52 GMT+02:00, Ilija Tovilo <[email protected]>:
> Hi Olle
>
>> I was trying to implement the result type from OCaml using enums, and
>> noticed that they can only carry int or string data, not arbitrary
>> data. Any specific reason for this?
>>
>> Example:
>>
>> enum Result: mixed {
>> case Ok = null;
>> case Error = null;
>> }
>>
>> Error with:
>>
>> Fatal error: Enum backing type must be int or string, mixed given in
>> /tmp/enum.php on line 3
>>
>> More specifically, for this idiom to work, "Ok" needs to be mixed and
>> "Error" should be string.
>>
>> OCaml idiom:
>> https://ocaml.org/learn/tutorials/error_handling.html#Result-type
>
> What you're trying to achieve here is not what backed enums are for.
> Backed enums are for assigning each enum case a single, constant
> representation that can be converted back and forth. As for Result,
> what you'd want here is a dynamic, arbitrary value for both Ok and
> Error, which is exactly what ADTs / tagged unions would allow you to
> do:
>
> https://wiki.php.net/rfc/tagged_unions
>
> enum Result
> {
> case Ok(mixed $result);
> case Error(mixed $error);
> }
>
> Optimally we'd define Result as "Result<TOk, TError>" but that's
> another discussion :)
>
> Note that work on ADT hasn't started yet.
>
> Ilija
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: https://www.php.net/unsub.php
>
>
Got it, thanks guys!
Olle
Thread (4 messages)