Skip to content

bowling: should we be precise about which roll, specifically, is erroneous? #440

Closed
@petertseng

Description

@petertseng

Take, for example, the sequence of rolls [5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

In this, we would expect the 6 is the erroneous roll. By this, we mean that if game = roll 6 (roll 5 bowlingStart), no matter what you do to game you cannot get a score out of it.

The tests don't test that precisely - they currently cannot, since roll returns a Bowling, and there is no way to determine the above-described property of a Bowling without trying to roll it to completion.

So my question is: Would we like to be more precise about which roll is erroneous?

(I have argued the same in the Rust implementation)

The gist is that I like to fail fast and close to the source of the error, so that it is easy to understand what caused the error.

If we find this desirable, some proposals to do it:

  • Add isValid :: Bowling -> Bool. I find this a little unclean.
  • Change roll's type to roll :: Bowling -> Int -> Either ___ Bowling (the ___ can be any user-defined error they like; the tests only need to test isLeft on it)

And a final question:

Should this be brought to x-common? Note that there will be a slight challenge in how to represent the "this specific roll should fail" in JSON (my current leading thought is keeping the rolls array but then adding a roll_should_fail entry)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions