Я не понимаю, почему этот код должен пройти проверку типов:
foo :: (Maybe a, Maybe b)
foo = let x = Nothing in (x,x)
Поскольку каждый компонент связан с одной и той же переменной x, я бы ожидал, что наиболее общим типом для этого выражения будет (Maybe a, Maybe a). Я получаю те же результаты, если я использую where вместо let. Я что-то пропустил?