Como reutilizar uma variável de tipo em uma declaração de tipo interna
omo parte do meu processo de aprendizado Haskell, eu gosto de digitar explicitamente as declarações de tipo para funções. Gostaria de poder fazê-lo para funções definidas em uma cláusula where, mas não sei como especificar, que uma variável de tipo em uma cláusula where deve denotar o mesmo tipo de alguma variável de tipo na declaração de tipo externa. Por exemplo, o seguinte código:
foo :: (a -> a) -> a -> a
foo f arg = bar arg
where
bar :: a -> a
bar a = f a
gera este erro:
src\Test.hs:7:14:
Couldn't match expected type `a' against inferred type `a1'
`a' is a rigid type variable bound by
the type signature for `foo' at src\Test.hs:3:8
`a1' is a rigid type variable bound by
the type signature for `bar' at src\Test.hs:6:11
In the first argument of `f', namely `a'
In the expression: f a
In the definition of `bar': bar a = f a
Como posso expressar que o primeiro argumento para bar deve ser do mesmo tipo que o segundo argumento para foo, para que eu possa aplicar f a el
Obrigado