Описание тега monomorphism-restriction
Ужасное ограничение мономорфизма в Haskell.
Ограничение мономорфизма Haskell приводит к тому, что некоторые функции, которые должны быть полиморфными, принудительно переходят в мономорфизм, вызывая ошибки. Например:
sum = foldr (+) 0
в GHC 7.10 это приведет к ошибке с таким сообщением:
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
Обычно это можно решить, явно указав сигнатуру типа:
sum :: (Foldable f, Num a) => f a -> a
Или сняв ограничение:
{-# LANGUAGE NoMonomorphismRestriction #-}