У меня проблема с Haskell в определении where. Когда у меня есть следующая функция f, где я хочу передать x в локально определенную функцию f1 без явного использования ее в качестве параметра, я получаю сообщение об ошибке, говоря, что тип x несовместим с тот, который находится на выходе f1, хотя он должен быть одним и тем же:
f :: Eq a => a -> [a]
f x = f1 x
where
f1 :: Eq a => a -> [a]
f1 y = [ x, y ]
Ошибка следующая:
Couldn't match expected type `a1' against inferred type `a'
`a1' is a rigid type variable bound by
the type signature for `f1' at test.hs:4:11
`a' is a rigid type variable bound by
the type signature for `f' at test.hs:1:8
In the expression: x
In the expression: [x, y]
In the definition of `f1': f1 y = [x, y]
Failed, modules loaded: none.
Когда я передаю x как дополнительный параметр, как это было в следующем коде с функцией g, он отлично работает:
g :: Eq a => a -> [a]
g x = g1 x x
where
g1 :: Eq a => a -> a -> [a]
g1 x y = [ x, y ]
Есть ли способ сделать тип a в f совместимым с типом a (или a1) в f1?