On Wed, Mar 07, 2012 at 05:44:31PM +0000, Guido Trotter wrote:
> LGTM
>
> Thanks,
>
> Guido
>
> (maybe abstracting the generation of the error message would help
> making it more readable?)
Possibly. What do you think about:
diff --git a/htools/Ganeti/HTools/Cluster.hs b/htools/Ganeti/HTools/Cluster.hs
index 1f868f5..e9e423a 100644
--- a/htools/Ganeti/HTools/Cluster.hs
+++ b/htools/Ganeti/HTools/Cluster.hs
@@ -1003,8 +1003,9 @@ evacOneNodeInner :: Node.List -- ^ Cluster node
list
-> EvacInnerState -- ^ New best solution
evacOneNodeInner nl inst gdx op_fn accu ndx =
case applyMove nl inst (op_fn ndx) of
- OpFail fm -> either (const $ Left $ "Node " ++ Container.nameOf nl ndx ++
- " failed: " ++ show fm) (const accu) accu
+ OpFail fm -> let fail_msg = "Node " ++ Container.nameOf nl ndx ++
+ " failed: " ++ show fm
+ in either (const $ Left fail_msg) (const accu) accu
OpGood (nl', inst', _, _) ->
let nodes = Container.elems nl'
-- The fromJust below is ugly (it can fail nastily), but
I'm more worried if the construct "either (const …) (const x) x" is
readable, as opposed to:
case x of
Left _ -> …
Right _ -> x
thanks,
iustin
> On Tue, Mar 6, 2012 at 11:59 PM, Iustin Pop <[email protected]> wrote:
> > Instead of manually case-ing on the Either contents, let's just use
> > either with const functions (not really readable, but…).
> > ---
> > htools/Ganeti/HTools/Cluster.hs | 7 ++-----
> > 1 files changed, 2 insertions(+), 5 deletions(-)
> >
> > diff --git a/htools/Ganeti/HTools/Cluster.hs
> > b/htools/Ganeti/HTools/Cluster.hs
> > index 11b7cae..a8acd2c 100644
> > --- a/htools/Ganeti/HTools/Cluster.hs
> > +++ b/htools/Ganeti/HTools/Cluster.hs
> > @@ -999,11 +999,8 @@ evacOneNodeInner :: Node.List -- ^ Cluster
> > node list
> > -> EvacInnerState -- ^ New best solution
> > evacOneNodeInner nl inst gdx op_fn accu ndx =
> > case applyMove nl inst (op_fn ndx) of
> > - OpFail fm ->
> > - case accu of
> > - Right _ -> accu
> > - Left _ -> Left $ "Node " ++ Container.nameOf nl ndx ++
> > - " failed: " ++ show fm
> > + OpFail fm -> either (const $ Left $ "Node " ++ Container.nameOf nl ndx
> > ++
> > + " failed: " ++ show fm) (const accu) accu
> > OpGood (nl', inst', _, _) ->
> > let nodes = Container.elems nl'
> > -- The fromJust below is ugly (it can fail nastily), but
> > --
> > 1.7.9.1