У меня проблема с 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
?