I think this is where I did not understand from the very beginning.
If the the declaration was correct, then why cannot b be H?
Referring to Data.List.genericLength, I was confused.
Because it doesn't mean that *you* get to decide what it is; it means *the caller* gets to decide, and you are obligated to honor the caller's wishes. Returning always an H violates this, because there is no way to prove that H is the only possible response.