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 -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: https://www.php.net/unsub.php
