opRunRunner :: Op -> [VAL] -> (VAL -> Bool) -> String -> Either String ()
opRunRunner op vals judge msg =
    case opRun op vals of
        Left new -> Left (show new)
        Right val -> case judge val of
            False -> Left msg
            True -> Right ()

-- Enum
-- ----
--
-- branches is supposed to build the following term:
opRunRunner :: Op -> [VAL] -> (VAL -> Bool) -> String -> Either String ()
opRunRunner op vals judge msg =
    case opRun op vals of
        Left new -> Left (show new)
        Right val -> case judge val of
            False -> Left msg
            True -> Right ()

-- Enum
-- ----
--
-- branches is supposed to build the following term:
opRunRunner op vals judge msg =
    case opRun op vals of
        Left new -> Left (show new)
        Right val -> case judge val of
            False -> Left msg
            True -> Right ()

-- Enum
-- ----
--
-- branches is supposed to build the following term: