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