Вот фиктивный пример:Укажите контекст, откуда приходит термин в Haskell
class Test a b where
witness :: a
f :: Test a b => a
f = witness
Haskell затем сказать
Could not deduce (Test a b0) arising from a use of ‘witness’
from the context (Test a b)
bound by the type signature for f :: Test a b => a
at test.hs:8:6-18
The type variable ‘b0’ is ambiguous
Relevant bindings include f :: a (bound at test.hs:9:1)
In the expression: witness
In an equation for ‘f’: f = witness
Ошибка происходит из того факта, что Haskell не может вывести тип переменной b0
и решение будет следует удалить параметр b
из определения класс Test
. Но на самом деле я не могу.
Мой вопрос: существует ли способ для объяснения идентификатора b0
с явным параметром b
в строке f :: Test a b => a
?
Спасибо.
добавляет 'Proxy b' аргумент (или даже' прокси b') в 'witness' вариант? –
В качестве альтернативы, добавляется функция «a -> b» с функциональной зависимостью? –
Или измените его на 'witness :: Constant a b' – rampion