Стрелки Haskell внутри кортежей

Я хочу создать кортеж, содержащий стрелку и строку, описывающую стрелку. Если я сделаю это с помощью функций (вместо стрелок), следующее будет работать, как ожидалось:

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)

Почему получаю ли я эту ошибку и что мне делать, чтобы ее избежать?

7
задан frosch03 27 February 2012 в 13:49
поделиться