Bir oyuncak (fizik) vektör kütüphanesi yazma sürecindeyim ve GHC ısrarcı fonksiyonlarla ilgili sorunlarımın türünde Integer
s olması gerekir. Ben vektörler (sadece *
kullanarak) vektörleri, hem de skalarlar çarpmak istiyorum, ve bu süre sadece ben şimdi tür hatalar alıyorum Vector
örneği Num
alarak mümkündü:Neden Haskell belirli bir tip (görünüşe göre) tutarsız bir şekilde sonuçlandı?
Couldn't match expected type `Integer' with actual type `Double'
ile uğraşırken sonra kod sorunu tespit etmek için bu kadar aşağı ele verdik:
data V a = V a a a deriving (Show, Eq, Functor)
scale a (V i j k) = V (a*i) (a*j) (a*k)
(<.>) = scale
Şimdi GHCi sorarsanız aldığımız ne tür bunlar:
>:t scale
scale :: Num a => a -> V a -> V a
>:t (<.>)
(<.>) :: Integer -> V Integer -> V Integer
<.>
'u kesinlikle istemiyoruz, sadece Integer
s. Bu, <.>
için bir tür imza ekleyerek burada düzeltilebilir olsa da, aslında neler olduğunu bilmek isterim.
[Monomorfizm kısıtlaması nedir?] Olası kopyası (http://stackoverflow.com/questions/32496864/what-is-the-monomorphism-restriction) – Bakuriu