Burada ne görüyoruz, çünkü hiçbir argümanlarla üst seviye açıklamaları monomorf olmak bir şartı olduğunu. GHC kullanıcı kılavuzunda some discussion of the reasons for this on the Haskell wiki ve controlling this behavior hakkında bazı bilgileri bulabilirsiniz. Yani
len x = genericLength x
> :t len
len :: Num i => [b] -> i
bunu bir tür imza veren yok: böylece
len :: (Num b) => [a] -> b
len = genericLength
Ve monomorfizm kısıtlama kapatarak vermez: Resimde olarak
, bir tartışma len
vererek sorunu giderip dikkat
Bu özel durumda
{-# LANGUAGE NoMonomorphismRestriction #-}
import Data.List (genericLength)
len = genericLength
> :t len
len :: Num i => [b] -> i
, sana da farklılık bir söylüyoruz ent tipi (yerine derleyici hatası) nedeniyle belirli tip sınıfları Integer
için, bu durumda belirli türleri (için Num
varsayılan varsayılan gerektiğini belirtmek kuralları varsaymak. Eğer fmap
ile aynı şeyi yapıyor çalışırsanız bu olsun:
> :r
[1 of 1] Compiling Main (MonoTest.hs, interpreted)
MonoTest.hs:4:5:
Ambiguous type variable `f0' in the constraint:
(Functor f0) arising from a use of `fmap'
Possible cause: the monomorphism restriction applied to the following:
f :: forall a b. (a -> b) -> f0 a -> f0 b
(bound at MonoTest.hs:4:1)
Probable fix: give these definition(s) an explicit type signature
or use -XNoMonomorphismRestriction
In the expression: fmap
In an equation for `f': f = fmap
Failed, modules loaded: none.
Sen Haskell 98 Report yılında varsaymak hakkında bilgi bulabilirsiniz. Ayrıca, GHC'nin daha çok GHCi için kullanılan genişletilmiş bir varsayılan biçimini desteklediğini (ve varsayılan olarak orada etkinleştirildiğini) ve zaman zaman insanları karıştırdığını belirteceğim.
bir cevap göndermek için bu konuda yeterince bilgiye sahip değiliz, ama bu [monomorfizm Kısıtlaması] ile bir ilgisi vardır eminim (http://www.haskell.org/haskellwiki/Monomorphism_restriction). Dosyanın en üstünde {- # LANGUAGE NoMonomorphismRestriction # -} 'yazarsanız, beklediğiniz gibi davranır. –
+1, Monomorfizm kısıtlaması ile ilgili olduğunu söyleyen Jeffrey'ye. –