Я хочу создать кортеж, содержащий стрелку и строку, описывающую стрелку. Если я сделаю это с помощью функций (вместо стрелок), следующее будет работать, как ожидалось:
funTimes10 = (*10)
describe10 = "times 10"
tuple10 :: (Num b) => ((b -> b), String)
tuple10 = (,) funTimes10 describe10
I можно получить доступ к функции с помощью fst
, а с помощью snd
я получаю строку описания функции.
Однако, если я заменяю функцию стрелкой, как показано ниже:
aTuple10 :: (Arrow a, Num b) => (a b b, String)
aTuple10 = (,) (arr funTimes10) describe10
fst
по-прежнему работает и возвращает мою стрелку, но snd
. Я получил только это сообщение об ошибке:
Ambiguous type variable `a0' in the constraint:
(Arrow a0) arising from a use of `aTuple10'
Probable fix: add a type signature that fixes these type variable(s)
In the first argument of `snd', namely `aTuple10'
In the expression: (snd aTuple10)
In an equation for `it': it = (snd aTuple10)
Почему получаю ли я эту ошибку и что мне делать, чтобы ее избежать?