Working in haskell, found odd behavior, stripped it down to bare bones
This Works
a :: Bool
a = case True of
True -> True
False -> Fals
I don't have the exact wording from the spec, but this Wikibook page explains the issue quite clearly.
The reason why it works like this is simple: to support binding multiple variables via a single let-group, such as:
c = do
let c' = …
d = …
e = …
return c'
Your True -> … and False -> … are mistakenly interpreted as additional variables to be bound.