Generalise the Result type
Currently, our error monad—Result—has a plain string error type. This is not good, as we don't have structured errors, we can't pass back proper error information to Python code, etc. To solve this, we generalise this type as 'GenericResult a', and make Result an alias to 'GenericResult String' for compatibility with the old code. New error hierarchies will be introduced as different types. Furthermore, we generalise our helper functions too, so that they can work on any 'GeneralInstance a' type, not only Result. There are two small drawbacks to this generalisation. First, a Monad instance requires (at least for the way we use it) a 'fail :: String -> m a' instance, so we need to be able to build an 'a' value from a string; therefore, we can implement the Monad instance only for a newly-introduced typeclass, 'FromString', which requires the needed conversion function. Second, due to the fact that 'String' is a type alias (for [Char]) instead of an actual type, we need to enable the FlexibleInstances language pragma; as far as I know, this has no significant drawbacks. Signed-off-by:Iustin Pop <iustin@google.com> Reviewed-by:
Michael Hanselmann <hansmi@google.com>
Showing
- htest/Test/Ganeti/BasicTypes.hs 1 addition, 1 deletionhtest/Test/Ganeti/BasicTypes.hs
- htest/Test/Ganeti/JSON.hs 1 addition, 1 deletionhtest/Test/Ganeti/JSON.hs
- htest/Test/Ganeti/TestCommon.hs 2 additions, 2 deletionshtest/Test/Ganeti/TestCommon.hs
- htools/Ganeti/BasicTypes.hs 42 additions, 29 deletionshtools/Ganeti/BasicTypes.hs
Loading
Please register or sign in to comment