read :: String -> Maybe PlainPythonObject
read :: String -> Maybe Json
goes a long way.
read :: String -> Maybe Json
goes a long way.
My point is that Python objects are certain data structure and if you bother to create type for it them then you can use it in function type.
You might want to return an error message on failure, or provide a mechanism for recovery, but those are somewhat specific to the use case and don't really address the key point of the article.