在GHCiOnline,let listRestDiv 4 = floor(4/(fromInteger (nextPrimeDiv 4)))
的工作,但一般缺少一定的Haskell的類型轉換
let listRestDiv n = floor(n/(fromInteger (nextPrimeDiv n)))
不被接受,其中nextPrimeDiv n
由
let nextPrimeDiv n = head [x|x<-[1..n], n `mod` x == 0, x/=1]
給出,只是返回下一個素因子。
它說:
從使用`地板」的從 上下文(積分b)由所述推斷出的類型的listRestDiv :: 積分B =>結合而產生無法推斷(RealFrac整數)整數 - > b在
並在那裏結束。我只是沒有在這裏得到類型。 在此先感謝您的任何提示。
這是很好的做法,加類型,在這種情況下,它將解決問題。 – 2015-03-03 12:24:53
正如@KarolyHorvath所示,最好爲所有頂級標識符編寫類型簽名,也爲一些非頂級標識符和表達式編寫類型簽名。這樣做可以讓你檢查編譯器,以確保你們兩個在轉向其他事情之前就你所定義的類型達成一致。雖然這個問題相當簡單,但你總有一天會得到一些可怕的類型檢查程序,這對你來說毫無意義 - 增加儘可能多的類型簽名,可以幫助你找出錯誤的具體位置。 'ScopedTypeVariables'有時候會有很大幫助。 – dfeuer 2015-03-03 14:45:23