Оказывается, что в GHC 7.10, это нормально компилируется:Почему Haskell указывает, что бесплатная версия функции приводит к ошибке неоднозначного типа?
mysum xs = foldr (+) 0 xs
Но это:
mysum = foldr (+) 0
приводит к следующей ошибке:
No instance for (Foldable t0) arising from a use of ‘foldr’
The type variable ‘t0’ is ambiguous
Relevant bindings include
mysum :: t0 Integer -> Integer (bound at src/Main.hs:37:1)
Note: there are several potential instances:
instance Foldable (Either a) -- Defined in ‘Data.Foldable’
instance Foldable Data.Functor.Identity.Identity
-- Defined in ‘Data.Functor.Identity’
instance Foldable Data.Proxy.Proxy -- Defined in ‘Data.Foldable’
...plus five others
In the expression: foldr (+) 0
In an equation for ‘mysum’: mysum = foldr (+) 0
Почему это происходит, и что такое понимание, которое достигается путем понимания этой разницы? Кроме того, могу ли я дать этой функции тип (который все еще является общим), чтобы эта ошибка исчезла?
* Страшное ограничение -мономорфизма ударяет снова * – AJFarmar
я думал , в недавнем GHC ограничение мономорфизма было отключено по умолчанию? – arrowd
@arrowdodger, вы пропустили письмо: в последнее время GHCi ограничение мономорфизма отключено по умолчанию. –