I think that, if someone uses `and` with functions that return non-booleans, they are using it incorrectly.

If one of the passed functions throws, `and(a, b)(value)` will throw, too. I can write a test for that, but the implementation doesn't need to change.

I'm not sure I got your point. Do you think there's a bug in the current implementation? If so, could you suggest a test that exposes the bug?