Я пишу библиотеку Haskell, которая использует Data.Vector
. Я успешно написал библиотечную функцию, но не знаю, как добавить к ней подпись. Ниже приведен простой пример, иллюстрирующий проблему:
import qualified Data.Vector.Generic as V
-- zip two vectors and return first element as a tuple
test :: (V.Vector v a, Fractional a) => v a -> v a -> (a, a)
test a b = (V.zip a b) V.! 0
Этот код вызывает следующую ошибку компиляции:
Could not deduce (V.Vector v (a, a))
from the context (V.Vector v a, Fractional a)
arising from a use of `V.zip' at MyLib.hs:7:12-20
Possible fix:
add (V.Vector v (a, a)) to the context of
the type signature for `test'
or add an instance declaration for (V.Vector v (a, a))
In the first argument of `(V.!)', namely `(V.zip a b)'
In the expression: (V.zip a b) V.! 0
In the definition of `test': test a b = (V.zip a b) V.! 0
Код выполняется, если я закомментирую подпись функции test
. Какая здесь правильная подпись?
Я использую GHC 6.12.3, векторную библиотеку 0.7.0.1.
Спасибо.